如何更新用`data`而不是`type`定义的PureScript记录?

0dB*_*0dB 6 purescript

更新使用type作品定义的记录,如与Haskell的差异中所述

type PointRec = { x :: Number, y :: Number }

setX :: Number -> PointRec -> PointRec 
setX val point = point { x = val }
Run Code Online (Sandbox Code Playgroud)

但是当使用data(并因此指定构造函数)定义时,它不会:

data PointRec = PointRec { x :: Number, y :: Number }

setX :: Number -> PointRec -> PointRec 
setX val point = point { x = val }
Run Code Online (Sandbox Code Playgroud)

我从编译器得到的错误是

Could not match type
Run Code Online (Sandbox Code Playgroud)

和一些细节.

我能在这做什么?

Phi*_*man 11

您需要解包并包装数据构造函数:

data PointRec = PointRec { x :: Number, y :: Number }

setX :: Number -> PointRec -> PointRec 
setX val (PointRec point) = PointRec (point { x = val })
Run Code Online (Sandbox Code Playgroud)