gpt4 book ai didi

PureScript 中的记录

转载 作者:行者123 更新时间:2023-12-04 16:52:30 27 4
gpt4 key购买 nike

我不太明白为什么会这样:

module Records where

type Element e = { element :: String, label :: String | e }
type Sel = ( value :: Number, values :: [Number] )

type Select = Element Sel

虽然这说 Cannot unify # * with * .
module Records where

type Element e = { element :: String, label :: String | e }
type Sel = { value :: Number, values :: [Number] }

type Select = Element Sel

(注意 Sel 右侧的“()”而不是“{}”。)

我在这里读过 https://leanpub.com/purescript/read#leanpub-auto-objects-and-rows那个 forall r. { firstName :: String, lastName :: String | r }脱糖 forall r. Object (firstName :: String, lastName :: String | r)
我还是有点困惑,为什么不能使用记录糖来扩展记录。

最佳答案

Object类型构造函数由一行类型参数化。以实物形式表示,Object有种# * -> * .也就是说,它需要一行类型到一个类型。
( value :: Number, values :: [Number] )表示一行类型(类型为 # * ),因此可以传递给 Object构造一个类型,即

Object ( value :: Number, values :: [Number] )

请注意 { ... }只是 Object 类型构造函数的语法糖,所以这与
{ value :: Number, values :: [Number] }

两者都有种类 * ,所以将这个东西作为参数传递给 Element 是没有意义的, 因为类型变量 eElement有种 # * .

换句话说, Element Sel在你的第二个例子中展开到
{ element :: String, label :: String | { value :: Number, values :: [Number] } }

哪个脱糖
Object (element :: String, label :: String | Object (value :: Number, values :: [Number]) )

因实物原因未进行实物核对 *在外排的尾部。

关于PureScript 中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28396148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com