let多相
letで束縛されている変数に限り多相性の伝搬を許す
OCamlのlet .. inを想像するとわかりやすい
以下のようなコードに対してidに多相性がないと型エラーになる
code:ml
let id = fun x -> x in if id true then 1 else id 2
なぜなら一度目のidはInt -> Intだが、二度目はBool -> Boolだから
ここでlet多相を用いることで以下のように展開する
code:ml
let id = fun x -> x in
if (fun x -> x) true then 1 else (fun x -> x) 2
こうすることで別もののidを使っていると見なして、letの範囲でのみ適当な型を与えられる