2016-03-02 18 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

相關問題