我真的很喜歡在一個通用的方式與catamorphisms/anamorphisms工作的想法,但在我看來,它有一個顯著的性能缺點: 假設我們想用一個樹形結構的分類方式工作 - 來形容不同的摺疊使用通用catamorphism function: newtype Fix f = Fix { unfix :: f (Fix f) }
data TreeT r = Leaf | Tree r r
我不耐煩了,期待了解catamorphism related to this SO question :) 我只練真實世界哈斯克爾教程的開始。所以,也許我現在要問的方式太多了,如果是這樣的話,只要告訴我我應該學習的概念。我的報價爲wikipedia code sample for catamorphism。 我想知道你對下面的foldTree的看法,這是一種遍歷Tree的方法,與其他SO的問題和答
我'發明'一個遞推方案,這是一個變形的泛化。當你與catamorphism倍的數據結構,你沒有訪問subterms,只能摺疊子結果: {-# LANGUAGE DeriveFunctor #-}
import qualified Data.Map as M
newtype Fix f = Fix { unFix :: f (Fix f) }
cata :: Functor f => (f
有時候我發現自己正在編制模式「如果Bool不是假的」或者「如果列表不是空的使用它,否則使用別的東西」。 我要尋找的布爾認爲是「可能」的功能是什麼也許和功能列表。有沒有? 更新:我的意思是使用布爾情況作爲列表的情況下的推廣。例如,當使用Data.Text作爲T時: if T.null x then x else foo x
我在尋找減少這種鍋爐板代碼。
我有這樣的語言AST data ExprF r = Const Int
| Var String
| Lambda String r
| EList [r]
| Apply r r
deriving (Show, Eq, Ord, Functor, Foldable)
我想將它轉換爲字符串 toString = cata $ \