Skip to content

Release 0.4.0

らいパン粉 edited this page Nov 11, 2018 · 14 revisions

Release 0.4.0

型指定に型変数を使用できるようにする

小文字から始まる型指定子はすべて型変数とみなされます。

id::a->a;

多相にはまだ対応してません。

関数をデフォルトでカリー化するように

add x y =x+y;

などのコードはすべてカリー化され

(add 4) 5;

のようにして呼び出すことができます。

Fn型の廃止

従来まで関数を受け取る関数や関数を返す関数の型指定には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;

ラムダ式をデフォルトでカリー化するように

普通の関数同様、カリー化が行われます。

エラーメッセージの改善

エラーメッセージをすこしだけ詳細化しました。

Clone this wiki locally