我不确定标题是否足够描述,但我对Haskell的经验不足。我想为双参数类型构造函数创建一个类型类,它取决于构造函数的参数化类型,例如
class MyTypeclass (ctor a b) where
funct :: (ctor a b) -> a
(假设ctor :: * -> * -> *
,a :: *
,b :: *
),假设我有
data Pair a b = Pair a b
能够做类似
的事情instance MyTypeclass (Pair a b) where
funct :: Pair a b -> a
funct (Pair x _) = x
是否可能没有多个参数类型类(因为它太强大了 - 我只想解构我的类型类被参数化的类型)?
答案 0 :(得分:7)
是的,您可以使用所谓的“构造函数类”来获取更高级的类型:
class C ctor where
funct :: ctor a b -> a
instance C Pair where
funct (Pair x _) = x
instance C (,) where
funct = fst -- (a,b) -> a