【发布时间】:2018-11-09 01:55:16
【问题描述】:
当我阅读History of Haskell 中的一些部分时,我发现:
但是,更高种类的多态性具有独立的效用:完全可以,并且有时非常有用,将数据类型声明为更高种类的参数化,例如:
data ListFunctor f a = Nil | Cons a (f a)
了解“基本”ADT 我在这里有点困惑,我的“猜测”是括号中的部分暗示了一个“参数”/“动态”一元数据构造函数 f?那么任何“可以接受”类型a 的* -> * 类型的数据构造函数?我的想法是正确的还是我误解了语法?我知道我“只是在猜测”,但我希望在这里获得对这种能力的“外行程序员”直觉,一些需要(或从中受益匪浅)的示例场景;)大多数情况下我可以想象(只是不是在什么确切的方式)这允许在那些“小型嵌入式通用可递归配置语言”中具有更大的灵活性 - Haskell 很高兴为 ...
在 GHCi 中,上面的 :i ListFunctor 给出:
type role ListFunctor representational nominal
data ListFunctor (f :: * -> *) a = Nil | Cons a (f a)
所以这似乎是从更清晰的data 声明中“推断”出来的。
【问题讨论】:
标签: haskell polymorphism higher-kinded-types