2016-03-02 70 views
4

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

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

setX :: Number -> PointRec -> PointRec 
setX val point = point { x = val } 

说明过,但是当与data(并因此确定一个构造)所定义type作品定义的记录,它不:

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

setX :: Number -> PointRec -> PointRec 
setX val point = point { x = val } 

错误我从编译器得到的是

Could not match type 

和一些细节。

我能在这里做什么?

+0

是使用镜头的唯一的解决办法? (刚刚在“24天......”的第6天发现了'purescript-lens'的文章)。 – 0dB

回答

7

你需要解开,敷数据构造:

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

setX :: Number -> PointRec -> PointRec 
setX val (PointRec point) = PointRec (point { x = val }) 
+0

有道理。根据我找到的文档,我一直在其他地方进行解包。只是没有想到再次包装。 – 0dB

相关问题