如何更新用 `data` 而不是 `type` 定义的 PureScript 记录?
How to update PureScript record defined with `data` instead of `type`?
更新使用 type
定义的记录有效,如 Differences from Haskell
中所述
type PointRec = { x :: Number, y :: Number }
setX :: Number -> PointRec -> PointRec
setX val point = point { x = val }
但是当用 data
定义时(因此指定了构造函数),它不会:
data PointRec = PointRec { x :: Number, y :: Number }
setX :: Number -> PointRec -> PointRec
setX val point = point { x = val }
我从编译器得到的错误是
Could not match type
和一些细节。
我可以在这里做什么?
您需要解包和包装数据构造函数:
data PointRec = PointRec { x :: Number, y :: Number }
setX :: Number -> PointRec -> PointRec
setX val (PointRec point) = PointRec (point { x = val })
更新使用 type
定义的记录有效,如 Differences from Haskell
type PointRec = { x :: Number, y :: Number }
setX :: Number -> PointRec -> PointRec
setX val point = point { x = val }
但是当用 data
定义时(因此指定了构造函数),它不会:
data PointRec = PointRec { x :: Number, y :: Number }
setX :: Number -> PointRec -> PointRec
setX val point = point { x = val }
我从编译器得到的错误是
Could not match type
和一些细节。
我可以在这里做什么?
您需要解包和包装数据构造函数:
data PointRec = PointRec { x :: Number, y :: Number }
setX :: Number -> PointRec -> PointRec
setX val (PointRec point) = PointRec (point { x = val })