PureScriptの型レベルプログラミング
pursの型レベルプログラミング
table:こんな対応のイメージ
普通 | 関数の型 関数のbody
型レベル | 型クラス instance
IfとかOrみたいな型レベルプログラミング用の型が提供されている
やってることはよくわからないが、IfとかOrとかを組み合わせて型型してる
Extractの部分は
code:purs(hs)
class Extract :: ∀ k. RowList k -> RowList k -> Constraint
class Extract xs ys | xs -> ys
instance extractNil :: Extract Nil Nil
else instance extractCons :: Extract ys zs => Extract (Cons key (Aff value) ys) (Cons key value zs)
これはこんな関数を型レベルで書いている感じ
「instanceで関数のbodyを書いている」がそのまま表現されている
code:purs(hs)
extract Nil = Nil
extractCons (Cons key (Aff value) ys) = Cons key value zs
RecordをEQ型クラスのinstanceにする実装を例に。