【发布时间】:2012-06-09 14:50:08
【问题描述】:
我在玩类型类并做了这个:
class Firstable f where
fst :: f a -> a
class Secondable f where
snd :: f a -> a
然后我尝试为(,) 添加一个实现并意识到我可以做到:
instance Secondable ((,) a) where
snd (x,y) = y
我很确定这行得通,因为Secondable 应该有一种(* -> *),其中((,) a) 具有那种类型,但是,我不知道如何为((,) * a) 实现Firstable,其中* 是绑定变量,在我的解释中,我试图做相当于:
instance Firstable (flip (,) a) where ...
有没有办法在 Haskell 中做到这一点?最好不要扩展?
【问题讨论】:
-
AFAIK,不:您需要
TypeSynonymInstances,但不能部分评估类型同义词。但是您知道MultiParamTypeClasses的替代方案吗?这可能有点难看,但它确实有效。 -
您可能对 tuple 包如何处理这个问题感兴趣:hackage.haskell.org/package/tuple