我'发明'一个递推方案,这是一个变形的泛化。当你与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
我在寻找减少这种锅炉板代码。
我真的很喜欢在一个通用的方式与catamorphisms/anamorphisms工作的想法,但在我看来,它有一个显著的性能缺点: 假设我们想用一个树形结构的分类方式工作 - 来形容不同的折叠使用通用catamorphism function: newtype Fix f = Fix { unfix :: f (Fix f) }
data TreeT r = Leaf | Tree r r
我有这样的语言AST data ExprF r = Const Int
| Var String
| Lambda String r
| EList [r]
| Apply r r
deriving (Show, Eq, Ord, Functor, Foldable)
我想将它转换为字符串 toString = cata $ \
我不耐烦了,期待了解catamorphism related to this SO question :) 我只练真实世界哈斯克尔教程的开始。所以,也许我现在要问的方式太多了,如果是这样的话,只要告诉我我应该学习的概念。我的报价为wikipedia code sample for catamorphism。 我想知道你对下面的foldTree的看法,这是一种遍历Tree的方法,与其他SO的问题和答