我是Haskell的初学者,并且从“Learn a Haskell”中学习。
关于Tree
的Foldable
实现,我有些不了解。
instance F.Foldable Tree where
foldMap f Empty = mempty
foldMap f (Node x l r) = F.foldMap f l `mappend`
f x `mappend`
F.foldMap f r
LYAH的话说:“因此,如果我们只为某种类型实现
foldMap
,我们将免费获得该类型的foldr
和foldl
!”。有人可以解释吗?我不明白如何以及为什么现在免费获得
foldr
和foldl
... 最佳答案
文件夹始终可以定义为:
foldr f z t = appEndo (foldMap (Endo . f) t) z
其中appEndo和Endo只是新类型的包装器/包装器。实际上,这段代码是直接从Foldable类型类中提取的。因此,通过定义foldMap,您可以自动获取foldr。
关于haskell - 当Tree实现Foldable foldMap时免费提供Foldr/Foldl吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23319683/