算法W使用递归方案

时间:2017-09-08 23:43:20

标签: haskell recursion type-inference hindley-milner recursion-schemes

我希望能够使用定点数据类型和递归方案来制定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)一般可以使用递归方案完成吗?

2 个答案:

答案 0 :(得分:3)

  

如果没有env部分,可以使用cata轻松实现。这个(使用env)一般可以使用递归方案完成吗?

您正在寻找的是chronomorphism。这允许您使用来自未来和过去的两个结果进行递归。它听起来并不像用户友好,但它是使用递归方案做事的规范方式。

答案 1 :(得分:2)

  

是的,只需将cata的目标设为Env -> a

即可

- luqui

  

是的,但您可能需要使用具有更高级别运营商类型的cata,计算可以修改环境并可能失败的操作。

- pigworker