如何更新用 `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 })