Kind Constraint在Haskell类型类实例中意味着什么



当类型变量被Haskell中的类约束时,我理解这意味着什么。

例如,在函数声明中,

myFunction :: Foldable f => f a -> b

意味着f是一个具有可折叠实例的类型,该实例包裹了其他类型a。

但是,当一个类型变量受到一个种类的约束时,这意味着什么?

例如,考虑可折叠的定义:

class Foldable (t :: * -> *) where

此外,一个例子来自函数定义,另一个例子则来自类定义,这一事实对约束的含义有什么不同吗?

t :: * -> *不是约束,它是一种注释。在这种情况下,可以注意到Foldable可以采用MaybeIdentity[]等类型的构造函数作为参数,甚至可以使用Either Bool(,) String等部分应用的构造函数。相比之下,CCD_ 8和CCD_。

CCD_ 10可以被读取为"0";CCD_ 11将类型映射到类型";。

重点是,当我们有Foldable f时,我们使用f,就像在f a中一样,将f应用于一个参数。如果我们允许f = Maybe,我们得到Maybe a,这是有意义的。如果我们允许f = Int,我们将得到Int a,这是没有意义的。

相关内容

最新更新