generated at
PureScriptのRecord
JavaScriptのobjectに対応する
syntaxもJSのobject literalと同じ
Recordはいろいろな型クラスのinstanceになっている ref
だからRecordのまま、 = での比較や、数値演算、論理演算などができる
RowToList型クラスを使って実装されている ref





kind
purs(hs)
data Record :: Row Type -> Type



以下2つは同じ
purs(hs)
type Person = Record (name :: String, age :: Number)
purs(hs)
type Person = { name :: String, age :: Number }
後者で書かれることが多い
{ xyz } Record (xyz) に脱糖される

purs(hs)
> showPerson { first: x, last: y } = y <> ", " <> x > :t showPerson forall r. { first :: String, last :: String | r } -> String
showPersonの引数は、以下のいずれも通す
purs(hs)
showPerson { first: "hoge", last: "piyo" } showPerson { first: "hoge", last: "piyo", a: "poyo" } showPerson { first: "hoge", last: "piyo", a: "poyo", b: "fuga" }
要はStringの first last さえ持っていればどんなrecordも受け付ける



拡張できる
tsでのgenericsかつ & みたいなやつ
purs(hs)
type Record1Poly r = { y :: String | r } type Record1 = Record1Poly Common
genericにしなくともこれでもいい
purs(hs)
type Record1= { y :: String | Common }



fieldへのアクセス
. でする
spago
> foo = {x:1, y:4} > foo.x 1
アクセスする関数を作る


Recordの更新
spago
piyo = { x: 12, y: {z: 20}} > piyo { x = 30} { x: 30, y: { z: 20 } } > piyo {y {z= 100}} { x: 12, y: { z: 100 } }
nestもいける
piyo {y {z= 100}} であって、 piyo {y: {z= 100}} ではない
「更新時は : は使わない」とおぼえておけば大丈夫
更新する関数を作る






関連


参考
Record同士の差分