Cons型クラス
getとかsetは、Record moduleに定義されている

定義
purs(hs)class Cons (label :: Symbol) (a :: k) (tail :: Row k) (row :: Row k)
| label a tail -> row, label row -> a tail
get関数
purs(hs)get :: forall r r' l a
. IsSymbol l
=> Cons l a r' r
=> SProxy l
-> { | r }
-> a
get (SProxy :: SProxy "x") { x: 1, y: "y", z: true }
-- 1
> :t R.get (Proxy :: Proxy "x")
forall (t3 :: Row Type) (t5 :: Type).
{ x :: t5
| t3
}
-> t5
label名経由で値にアクセスする関数
先にlabelを指定するので、第2引数はそのlabelを持っていないとコンパイルエラーになる
set関数
purs(hs)set :: forall r1 r2 r l a b
. IsSymbol l
=> Cons l a r r1
=> Cons l b r r2
=> SProxy l
-> b
-> { | r1 }
-> { | r2 }
set (SProxy :: SProxy "x") "hoge" { x: 1, y: "y", z: true }
-- { x: "hoge", y: "y", z: true }
labelに値を入れる関数