-
Notifications
You must be signed in to change notification settings - Fork 4
Release 0.4.0
らいパン粉 edited this page Nov 11, 2018
·
14 revisions
小文字から始まる型指定子はすべて型変数とみなされます
id::a->a;
add x y =x+y;
などのコードはすべてカリー化され
(add 4) 5;
のようにして呼び出すことができます。
従来まで関数を受け取る関数や関数を返す関数の型指定にはFnキーワードが必要でした。
例えば関数を受け取ってそのままその関数を返す恒等射象の型指定はこうでした。
id::(Fn Int32->Int32)->(Fn Int32->Int32);
しかしFnを撤廃したので次からはこうです。
id::(Int32->Int32)->(Int32->Int32);
さらに->は右結合なので、
id::(Int32->Int32)->Int32->Int32;
このようにできます。
ラムダ式の文法は
\[キャプチャ変数]引数->式
となってます。
いくつかの例を示します。
infixl 0 +;
ex print::Int32->Int32;
id::(Int32->Int32)->Int32->Int32;
id x = x;
main = print(id (\x->x+2) 5);
infixl 0 +;
add::Int32->Int32->Int32;
add x = \[x]y->x+y;
main = (add 4) 5;
infixl 0 +;
main = (\x,y,z->x+y+z)x y z;
普通の関数同様、カリー化が行われます。
エラーメッセージをすこしだけ詳細化しました。