当类型变量被Haskell中的类约束时,我理解这意味着什么。
例如,在函数声明中,
myFunction :: Foldable f => f a -> b
意味着f是一个具有可折叠实例的类型,该实例包裹了其他类型a。
但是,当一个类型变量受到一个种类的约束时,这意味着什么?
例如,考虑可折叠的定义:
class Foldable (t :: * -> *) where
此外,一个例子来自函数定义,另一个例子则来自类定义,这一事实对约束的含义有什么不同吗?
t :: * -> *
不是约束,它是一种注释。在这种情况下,可以注意到Foldable
可以采用Maybe
、Identity
、[]
等类型的构造函数作为参数,甚至可以使用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
,这是没有意义的。