小编Mon*_*ult的帖子

具有种类和类型变量的Haskell多态性

在Haskell中,我了解到类型变量(例如id :: a -> a),应用于类型签名,以及种类(例如Maybe :: * -> *),应用于类型构造函数和类型类.类型必须具有种类*(是具体类型)才能保存值.

我们使用类型变量来启用多态:Nothing :: Maybe a意味着常量Nothing可以属于一系列可能的类型.这使我相信kinding和类型变量具有相同的目的; 最后的代码示例不会像简单的那样工作Nothing :: Maybe,其中类型类可能仍然* -> *表示该类型属于泛型族吗?

我们看起来正在做的是获取一个空参数(* -> *)并用一个a表示相同方差级别的类型变量()填充它.

我们在另一个例子中看到了这种行为

>>> :k Either
Either :: * -> * -> *
>>> :t Left ()
Left () :: Either () b
>>> :t Right ()
Right () :: Either a ()
Run Code Online (Sandbox Code Playgroud)

为什么在理论上有必要区分种类和类型变量?

polymorphism haskell

4
推荐指数
1
解决办法
162
查看次数

标签 统计

haskell ×1

polymorphism ×1