関数束縛

関数束縛なんて以下略。文法は「let fname p0 p1 p2 ... = expr」です。

# let f n = n + 3;;
val f : int -> int = <fun>
# f 4;;
- : int = 7

fは整数型を引数に取り、整数型を返す関数です、みたいな感じの解釈でいいんだと思います。
ここでも型推論ちゃんとしてて偉いですね。
curry化とかまあ説明するのめんどくさいので適当ですが、まあつまり、こういうことができます。

# let g x y = x + y;;
val g : int -> int -> int = <fun>
# let f x = g x;;
val f : int -> int -> int = <fun>

関数fは「整数型の引数を一つとり、『整数型の引数を一つ取り整数型を返す関数』を返す関数」になります。
何かややこしいですが、つまり以下の二つの関数呼び出しは同義、ということになります。
(嘘です。ほんとは内部で行われてる処理が違うかもしれません。まあ使う分には同じです)

# f 1 2;;
- : int = 3
# g 1 2;;
- : int = 3

というか、fのような関数を定義しなくても、以下のような呼び出しが普通に合法です。

# g 1;;
- : int -> int = <fun>
#

勿論これも、「f 1」と同義です。すごーい。えらーい。
(嘘です以下略)