束縛、ラムダ抽象、および、関数適用があります。条件式と算術に関するものは、前章と共通です。\]次に、新しい評価規則です。リストに関するものです。\]残りの評価規則を示す前に、代入を表す記法を導入します。置き換えたものを示します。煩雑なのでここでは省略します。残りの、let束縛と関数に関わる評価規則を示しましょう。行き詰まり状態になるかのどちらかとなります。当てはまる評価規則がないので行き詰まり状態です。三項関係に変更されます。現れる自由変数の型に関する仮定です。前章での型付け規則は、型を検査して、項の型を決めるような規則の集まりでした。出力する規則だったといえます。一方で、型推論システムにおいては、型に関する規則は、次のような形をとります。しており、つまり、これらが特定の型であることを要請していません。いう2つの新たな制約を、制約集合に追加します。この言語の制約型付け規則をここに示す。アイディアを用います。空でないなら、「最良の」解を見つける方法です。モジュール宣言、ライブラリのインポート簡単のために、型推論のコードは単一のモジュールとして提示します。豊富な語彙のうちでも基本的なものだけを使いました。関数のみを用いています。整数値から識別子を生成するための方法を用意しておきます。関数から用いられます。以下のようになります。ここでは、簡単のために、定数を定義済みの変数として扱うことにしています。次に、型の表現を定義します。中においてのみ用いられます。以下に、いくつか型コンストラクタの実例を示します。用いて定数や変数から構築されます。型の表現は次のようになります*4。"a")))このような関数型の構築は度々行うため、次に示すようなヘルパー関数を用意しておきます。第一要素に重複がないようなペアのリストとして表現できます。型は型変数に適用します。他の値にも適用できるようにしておくのが便利です。異なる対象に使えるようにしておくと便利だということですね。型代入の定義域にある型変数の出現を対応する型に置き換えることです。これは、出現する順(左から右)に重複のないリストとして返されます。[]リストに適用できるようにしておくのは簡単で、かつ便利です。関数は、より複雑な型代入をつくるときにも使われます。等しくなるような複合関数はつぎのように書けます。型スキーム多相型をあらわすために、型スキームを定義します。量化された(全称型の)型変数です。後に、型スキームを実体化する際に便利なため、型スキームの定義に含めました。ゆるされるのは、型スキームの中だけです。量化された型変数は型スキームにおいて束縛されているので、型代入の影響を受けません。これらをどうにか強制できないかということで、このような定義になっています。データ型で表現されます。仮定の各要素は、変数名と型スキームのペアです。クラスのインスタンスにして、型代入を適用できるようにしておきます。sc仮定に関しても、いくつかヘルパー関数を用意します。単一化の目的は、2つの型が一致するような型代入を見つけることです。することで、より一般的な型を得ることができます。