Arc*_*ron 5 records type-kinds purescript
我不太明白为什么这样做:
module Records where
type Element e = { element :: String, label :: String | e }
type Sel = ( value :: Number, values :: [Number] )
type Select = Element Sel
Run Code Online (Sandbox Code Playgroud)
虽然这样说Cannot unify # * with *.
module Records where
type Element e = { element :: String, label :: String | e }
type Sel = { value :: Number, values :: [Number] }
type Select = Element Sel
Run Code Online (Sandbox Code Playgroud)
(注意Sel右侧的'()'而不是'{}'.)
我在这里读https://leanpub.com/purescript/read#leanpub-auto-objects-and-rows是forall r. { firstName :: String, lastName :: String | r }desugars到
forall r. Object (firstName :: String, lastName :: String | r)
我仍然有点困惑,为什么你不能使用唱片糖来扩展记录.
Phi*_*man 13
该Object 类型的构造是由参数的类型列.实物符号,Object有种类 # * -> *.也就是说,它需要一种类型的类型.
( value :: Number, values :: [Number] )表示一行类型(某种类型# *),因此可以传递给它Object来构造一个类型,即
Object ( value :: Number, values :: [Number] )
Run Code Online (Sandbox Code Playgroud)
注意,这{ ... }只是Object类型构造函数的语法糖,所以这和
{ value :: Number, values :: [Number] }
Run Code Online (Sandbox Code Playgroud)
两者都有种类*,因此将这个东西作为参数传递是没有意义的Element,因为类型变量ein Element有种类# *.
换句话说,Element Sel在你的第二个例子中展开
{ element :: String, label :: String | { value :: Number, values :: [Number] } }
Run Code Online (Sandbox Code Playgroud)
不好意思
Object (element :: String, label :: String | Object (value :: Number, values :: [Number]) )
Run Code Online (Sandbox Code Playgroud)
由于*外排尾部的那种东西而无法检查.
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |