我希望能够运用不动点数据类型和递归模式来表述Hindley-Milner类型推断算法。除了递归部分外,忽略所有细节:
w env term = case term of
Lam n e -> lam (w (modify1 env) e)
App a b -> app (w (modify2 env) a) (w (modify3 env) b)
...
算法在递归遍历树时构建了一个名为
env
的环境数据结构,直到达到叶子节点。之后,它在构建结果时使用此信息。如果没有
env
部分,则可以简单地使用cata
实现。在使用递归方案时,是否可以一般性地实现这一点(使用env
)?
Env -> a
。 - luquicata
,计算可以修改环境并可能失败的操作。 - pigworker