おれが
Hindley-Milnerだ!!!
注意
前提知識多め
型推論:式から型を推測する
Hindley-Milner型システム
HindleyとMilnerが独立に発見
うまく式に型をつけられる
しかもつけた型は最も一般的
なものになる
要約
すごい!!!
How it works
式の形見れば大体型が分かる
分からんところは変数にしておく
後で変数の制約が分かるから
それを適用する
How it works
λx. y
How it works
λx. y
とりあえずx: αとおく
How it works
λx. y
{x: α}という情報から,
yの型を推論する
How it works
λx. x+1
{x: α}で,(+)の引数はIntなのでαはInt
(+)の結果はIntなのでx+1の型はInt
のとき
後でやる型推論から
既に導入した型変数の値が分かる!!!
推論関数inferは
(変数名→型,式)→
(型変数→型,型)
という型を持つ
推論関数inferは
({x: α},x+1)→
({α:Int},Int)
という値を持つ
How it works
λx. x+1
{x: α}で,(+)の引数はIntなのでαはInt
(+)の結果はIntなのでx+1の型はInt
のとき
How it works
λx. x+1
のとき
Int
α
α→Int
⇒{α: Int}を代入して,Int→Int
How it works
λx. x
のとき
α
α→α
注意: αは特定の具象型(∀αではない)
α
How it works
let id = λx. x
α→α
ここで一般化(generalize)
αにはどんな型を入れてもよいので,
{id: ∀α. α→α}とする
しゃべったこと
- 分からない型は変数でおいて続ける
- 後で型の制約が分かったら代入(substitute)する
- 名前に値を束縛するときに一般化(generalize)する
しゃべら(れ)なかったこと
- 同じ型について別々の推論結果が出たときは単一化(unify)する
- 実は∀α. α→αは型ではなくスキームであり,名前はスキームを持つが値はスキームを持たない(型を持つ)
- スキームから型を取り出すことを実体化(instantiate)と呼ぶ

Hindley-Milner
By pandaman64
Hindley-Milner
- 867