6

Haskell との違いtypeで説明されているように、works で定義されたレコードを更新する

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 に答える