我正在使用 中的功能recursion-schemes
,并努力弄清楚它是否提供了通用的东西mapAccumR
。足以实现的功能,例如:
f :: [Int] -> (Int,[Int])
f [] = (0,[])
f (x:xs) = let (sz,xs') = f xs in (sz+x, x*sz : xs')
...在一个Fix
-ed 结构的单遍中,例如:
data L a as = Empty | C a as
input :: Fix (L Int)
input = Fix (C 1 (Fix (C 2 (Fix Empty))))
zygo
似乎几乎是我想要的,除了我需要访问最终结果b
(上例中的最终总和)。
我的实际用例是在注释时对 AST 进行类型检查,并返回表达式的类型。