基于约束的代数数据类型推断
我正在研究一种基于表达的ML族谱语言,因此自然需要类型推断> :) 现在,我正在尝试基于EOPL(Friedman和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 …