[英]What Does Kind Constraint mean in Haskell typeclass instance?
当Haskell中的类约束类型变量时,我明白这意味着什么。
例如,在 function 声明中,
myFunction :: Foldable f => f a -> b
意味着 f 是一个具有 Foldable 实例的类型,它包装了一些其他类型 a。
但是,当类型变量受种类约束时,这意味着什么?
例如考虑可折叠的这个定义:
class Foldable (t :: * -> *) where
此外,1 个示例来自 function 定义而另一个示例来自 class 定义这一事实对约束的含义有何影响?
t:: * -> *
不是约束,它是一种注解。 在这种情况下,它用于说明Foldable
可以采用 arguments 类型构造函数,例如Maybe
、 Identity
、 []
,甚至部分应用的构造函数,例如Either Bool
和(,) String
。 相比之下, Foldable Int
和Foldable [Bool]
属于类错误。
t:: * -> *
可以理解为“ t
将类型映射到类型”。
关键是,当我们有Foldable f
时,我们会像在fa
中一样使用f
,将f
应用于一个参数。 如果我们允许f = Maybe
我们得到Maybe a
这是有道理的。 如果我们允许f = Int
,我们将得到无意义Int a
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.