generated at
let多相
パラメトリック多相を少し制限したもの
letで束縛されている変数に限り多相性の伝搬を許す
OCamlの let .. in を想像するとわかりやすい


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