我在玩recursion-schemes
的功能,並努力弄清楚它是否提供了一些推廣的東西mapAccumR
。一些強大到足以實現如:mapAccumR類似於Fix的遞歸方案?
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,並返回表達式的類型。
你期待什麼類型的簽名? – dfeuer
另外,你應該看看'para'。 – dfeuer
但回到我的第一個問題,'mapAccumR'是'Traversable'函數的一個已知概念;它對於任意類型的固定點應該表示什麼意義還不太清楚。 – dfeuer