【发布时间】:2019-06-21 05:56:27
【问题描述】:
对于如何为新数据类型创建折叠函数是否有一种通用的思维方式?
例如数据树的折叠函数为:
data Tree t = Leaf | Node t (Tree t) (Tree t)
deriving (Eq,Ord,Show)
treeFold:: (a -> b -> b -> b) -> b -> Tree a -> b
treeFold f e Leaf = e
treeFold f e (Node x l r) = f x (treeFold f e l) (treeFold f e r)
例如,我将如何为以下数据创建折叠函数?
data Json a = Val a | Obj [(String, Json a)]
我知道该类型必须包含 2 个函数,一个用于 Val 和 Obj 的情况。创建折叠时我必须考虑什么?我希望我的问题是有道理的。我刚刚遇到许多不同的数据类型,要求为数据类型编写折叠函数,但我似乎没有找到模式。
【问题讨论】:
标签: haskell fold algebraic-data-types