类型类定义中类型的解构(Haskell)
我不确定这个标题是否具有足够的描述性,但我对Haskell不是很有经验。我想为两个参数类型构造函数创建一个typeclass,它取决于构造函数参数化的类型,如类型类定义中类型的解构(Haskell),haskell,typeclass,Haskell,Typeclass,我不确定这个标题是否具有足够的描述性,但我对Haskell不是很有经验。我想为两个参数类型构造函数创建一个typeclass,它取决于构造函数参数化的类型,如 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) w
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
如果没有多个参数类型类(因为它太强大了——我只想解构我的类型类被参数化的类型),是否可能呢?是的,您可以使用所谓的“构造函数类”来获取更高级的类型:
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
谢谢它起作用了。但是我非常关心在那里发生的类型推断的数量——我如何用两个构造函数类生成两个参数的typeclass?我需要一种方法来指定哪种类型来自何处。我不确定是否理解您的顾虑-但请记住:类变量(此处
ctor
)必须出现在每个类函数签名中,并且必须应用于正确数量的类型参数。因此,所有类型都是通过输入固定的。那么更简单的问题是:你能在实例C对中给出funct
的显式类型签名吗?当然,只要在类memeber的类型符号中用对替换ctor
。好的,我想现在我或多或少理解了:)。