CS101 の学生が理解できる方法でダマス・ミルナー型推論を説明する
-
12-09-2019 - |
質問
Hindley-Milner は、多くのよく知られた関数型プログラミング言語の型システムの基礎となる型システムです。Damas-Milner は、Hindley-Milner 型システムで型を推論 (推定?) するアルゴリズムです。
ウィキペディア 私の知る限り、アルゴリズムの説明は 1 つの単語に相当します。"統一。"それだけですか?そうであれば、興味深い部分は型推論システムではなく型システム自体であることを意味します。
Damas-Milner が単一化以上のものである場合は、簡単な例と、できればコードを含む、Damas-Milner の説明が必要です。
また、このアルゴリズムは型推論を行うともよく言われます。それは本当に推論システムですか?単に種類を推測しているだけだと思っていました。
関連する質問:
解決
ダマミルナーは、統一の単なる構造化され使用されます。
それは新しい変数名を構成するラムダ式に再帰する場合。あなたは、サブ用語で、指定された型を必要とする方法で使用されている変数を見つけた場合、それはその変数とその型の統一を記録します。それは今までに意味を持たない2つのタイプを統一しようとすると、個々の変数がintとの機能の両方であることを言うような - > B、それは悪い何かをするためにあなたに叫ぶ。
。また、このアルゴリズムは、多くの場合、型推論を行うと言われています。それは実際に推論システムですか?私はそれが唯一の種類を推定されたと思っています。
のタイプを推測型推論です。その型注釈が与えられた期間のために有効で見てチェックすることは型チェックです。彼らはさまざまな問題があります。
もしそうなら、それは興味深い部分は、型システムそのものではない型推論システムであることを意味します。
一般的にヒンドリー - ミルナースタイルのタイプのシステムは、カスプ上でバランスしていると言われています。あなたは非常に多くの機能を追加した場合には、種類を推測することができなくなってしまいます。ですから、その推論の性質を破壊することなくヒンドリー - ミルナースタイル型システムの上の層ができ型システムの拡張は、本当に現代の関数型言語の興味深い部分です。いくつかのケースでは、我々は近代的な拡張の多くは推測できないHaskellでは、たとえば、型推論と型チェックを混ぜますが、確認することができますので、それらは多型再帰のような、高度な機能のための型注釈が必要です。
他のヒント
ウィキペディアは、私の知る限り、単一の単語になる、アルゴリズムの説明を示します:「統一を」すべてがそれにあるということですか?もしそうなら、それは興味深い部分は、型システムそのものではない型推論システムであることを意味します。
IIRC、ダマ・ミルナーの型推論アルゴリズムWの興味深い部分は、それが可能な限り最も一般的なタイプを推測ということです。