私はML系図の表現ベースの言語に取り組んでいるので、当然、型推論が必要です> :)
現在、EOPL(Friedman and Wand)の単純な実装に基づいて、制約ベースのソリューションを型推論の問題に拡張しようとしていますが、それらはエレガントに代数的データ型を回避しています。
これまでのところ、スムーズに機能しています。式がある場合e
でa + b
、e : Int
、a : Int
とb : Int
。e
一致する場合、
match n with
| 0 -> 1
| n' -> n' * fac(n - 1)`,
私は当然と推論することができt(e) = t(the whole match expression)
、t(n) = t(0) = t(n')
、t(match) = t(1) = t(n' * fac(n - 1)
のように...
しかし、代数的データ型に関しては、私は非常に確信が持てません。filterのような関数を想定します。
let filter pred list =
match list with
| Empty -> Empty
| Cons(e, ls') when pred e -> Cons (e, filter ls')
| Cons(_, ls') -> filter
リストのタイプが多態性を維持するためには、コンスはタイプである必要がありa * a list -> a list
ます。だから、これらの制約を確立するには、私は明らかに私の代数的コンストラクタのこれらのタイプをルックアップする必要がある-私が今持っている問題は、代数コンストラクタの複数の用途の「文脈感度」です-どのように私は私の制約式で表現しないことa
でそれぞれのケースは同じである必要がありますか?
これに対する一般的な解決策を見つけるのに苦労しており、これに関する多くの文献を見つけることができません。私が似たようなものを見つけたときはいつでも-制約ベースの型推論を備えた式ベースの言語-代数的データ型とポリモーフィズムが足りなくなる。
どんな入力でも大歓迎です!