【发布时间】:2016-07-23 13:55:16
【问题描述】:
我有这个 AST
data ExprF r = Const Int | Add r r
type Expr = Fix ExprF
我想比较一下
x = Fix $ Add (Fix (Const 1)) (Fix (Const 1))
y = Fix $ Add (Fix (Const 1)) (Fix (Const 2))
但所有递归方案函数似乎只适用于单一结构
显然我可以使用递归
eq (Fix (Const x)) (Fix (Const y)) = x == y
eq (Fix (Add x1 y1)) (Fix (Add x2 y2)) = (eq x1 x2) && (eq y1 y2)
eq _ _ = False
但我希望可以使用某种 zipfold 功能。
【问题讨论】:
-
你从哪里得到你的修复?
-
你可能想要一个 zygohistomorphic prepromorphism。我不知道它做了什么,但有了这样的名字,我无法想象它不能做的事情太多了。 :)
-
在递归方案中修复有 Eq1 的实例
标签: haskell tree abstract-syntax-tree catamorphism recursion-schemes