更新使用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)