第 6 章 型の解析と型推論
型代入の考え方
6.5.3項での説明の通り,型推論アルゴリズムは 与えられた型環境と式を受け取り, 型と型代入の組を返す
の形の関数である. このの内部構造を理解し,さらに,新たな式の定義を考える 上での鍵は,型代入の役割の理解にある. 型代入が複数でてきて分かりにくいと思えたら,
型代入の作成は,型の制約が成り立つ「新しい世界」を作る操作
と考えるてみよう. 前の世界の型や型環境は,新しい世界ではおよび となる. この考え方の下では,関数適用のケース
let |
( fresh) |
in |
は以下の計算を行っている,と理解できる.
-
1.
式 の制約解消されていない世界のが与えられている.
-
2.
の制約を満たす世界を表す型代入とその世界でのつまり ()の下でのの型を求める.
-
3.
さらに,の制約を満たす新しい世界を表すと, その世界での型環境の下でのの型を求める.
-
4.
この世界で,の型を表す新しい型変数を作る. この世界では,はであるから, 型規則が要求する等式は
である. この等式を満たす世界を表す型代入を求める.
この新しい世界でははである.
-
5.
最初に与えられた世界の型をこの世界に送る 型代入はであるから,返すべき値は である.
この考え方を会得すれば,種々の新しい構文に対する型推論手順を
書くことができるはずである.
例として,7.3節で解説するfix式の型規則
(fix)
の定義を書いてみよう.
考え方を以下の通りである.
-
1.
式fix () => の制約が解消されていない世界の が与えられている.
-
2.
との型を表現するために,この世界で新しい型変数とを作成し, の制約を満たす世界を表すと,その世界での型環境の 下でのの型を求める.
-
3.
この新しい世界では,はであるから,型規則の制約を表す等式は
である. この等式を満たす世界を表す型代入を求める.
-
4.
この世界では,はであり,もとの世界を この世界に移す代入はであるから,求める解は
である.
以上から,の定義は,
let (, fresh) |
in |
となる.