我有這個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
但我希望有可能使用s有些拉鍊功能。
從哪裏得到您的Fix? – danidiaz
https:// hackage。haskell.org/package/recursion-schemes – ais
你可能想要一個zygohistomorphic prepromorphism。我不知道它做了什麼,但有了這樣的名字,我無法想象它有多少*不能做。 :) – chepner