6

更新用type作品定义的记录,如与 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

和一些细节。

我可以在这里做什么?

4

1 回答 1

13

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

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

setX :: Number -> PointRec -> PointRec 
setX val (PointRec point) = PointRec (point { x = val })
于 2016-03-02T19:27:50.633 回答