我有这个 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 功能。