我有一个简单的树结构:
data Tree a = Leaf | Node a (Tree a) (Tree a)
Run Code Online (Sandbox Code Playgroud)
还有一个可折叠的实现:
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
Run Code Online (Sandbox Code Playgroud)
和它的作品,即使有对没有实现Monoid,我不能既不使用mappend也不mempty在我的代码.那么这个Foldable实现如何工作?