当我阅读Haskell历史中的一些章节时,我遇到了:
但是,更高级别的多态性具有独立的效用:声明在更高种类上参数化的数据类型是完全可能的,有时非常有用,例如:
data ListFunctor f a = Nil | Cons a (f a)
Run Code Online (Sandbox Code Playgroud)
知道"基本"ADT我在这里有点困惑,我的"猜测"是parens中的部分表示"参数"/"动态" 一元数据构造函数 f?所以任何* -> *"可以接受"类型的数据构造函数a?我的想法是正确的还是我误解了语法?我知道我"只是在猜测",但我希望在这里能够获得一个关于这种能力的"平面程序员"直觉,一些需要(或从中受益匪浅)的示例场景;)大多数我可以想象(只是没有在什么精确的方式)这使得那些"小型嵌入式多功能可递送配置语言"-ADTs更加灵活,Haskell很高兴能够evals为... 编写和编写?
在GHCi中,:i ListFunctor基于以上给出:
type role ListFunctor representational nominal
data ListFunctor (f :: * -> *) a = Nil | Cons a (f a)
Run Code Online (Sandbox Code Playgroud)
所以这似乎是从更加清晰的data宣言中"推断出来的" .