我希望能够使用定点数据类型和递归方案来制定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
)一般可以使用递归方案完成吗?
答案 0 :(得分:3)
如果没有env部分,可以使用cata轻松实现。这个(使用env)一般可以使用递归方案完成吗?
您正在寻找的是chronomorphism。这允许您使用来自未来和过去的两个结果进行递归。它听起来并不像用户友好,但它是使用递归方案做事的规范方式。
答案 1 :(得分:2)
是的,只需将
即可cata
的目标设为Env -> a
- luqui
是的,但您可能需要使用具有更高级别运营商类型的
cata
,计算可以修改环境并可能失败的操作。
- pigworker