我是Haskell的初学者,并且从“Learn a Haskell”中学习。

关于TreeFoldable实现,我有些不了解。

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,我们将免费获得该类型的foldrfoldl!”。

有人可以解释吗?我不明白如何以及为什么现在免费获得foldrfoldl ...

最佳答案

文件夹始终可以定义为:

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/

10-16 04:25