Files
Decodal/doc/manual/source/jp/language/functions.md
T

1.2 KiB

関数

関数は値を受け取り、値を返す純粋な式である。

構文

(value: Int) => value + 1

関数呼び出しは通常の呼び出し構文で行う。

let
    increment = (value: Int) => value + 1;
in
    increment(41)

複数の parameter を指定できる。

(input_a: { hoge = Int & >= 0; }, input_b: { fuga = Int; }) =>
{
    hoge = input_a.hoge;
    fuga = input_b.fuga;
}

parameter range は省略できる。 range がある場合、引数は参照された時点で as と同じ規則によって検証・絞り込みされる。

Scope and evaluation

関数は lexical scope を持ち、定義された場所の bindings を参照する。 引数は遅延評価され、関数本体から参照されない引数は評価されない。 再帰的な field または argument の依存は cycle diagnostic になる。

関数は中間値として参照・呼び出しできるが、data として materialize できない。 未適用の関数が materialize 対象に残っている場合は diagnostic になる。 関数値同士の等価性は定義されず、& で関数値同士を合成すると conflict になる。