我有一个简单的树结构:
data Tree a = Leaf | Node a (Tree a) (Tree a)
和一个可折叠的实现:
import qualified Data.Foldable as F
instance F.Foldable Tree where
foldMap f Leaf = mempty
foldMap f (Node x l r) = F.foldMap f l `mappend`
f x `mappend`
F.foldMap f r
即使没有实现,它也可以工作Monoid
,我既不能使用也mappend
不能mempty
在我的代码中使用。那么这个Foldable
实现是如何工作的呢?