我是Haskell的初学者,并且从"了解你一个Haskell"中学到了一些我对Foldable的Tree实现不了解的东西.
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
Run Code Online (Sandbox Code Playgroud)
引用来自:LYOH:"因此,如果我们只为某种类型实现foldMap,我们可以免费获得该类型的foldr和foldl!"
有人可以解释一下吗?我不明白为什么以及如何免费获得foldr和foldl ..
ghci> :t pure []
pure [] :: Applicative f => f [a]
Run Code Online (Sandbox Code Playgroud)
ghci> pure []
[]
Run Code Online (Sandbox Code Playgroud)
ghci> :t []
[] :: [a]
Run Code Online (Sandbox Code Playgroud)
ghci> fmap ((:) 2) (pure [])
[2]
Run Code Online (Sandbox Code Playgroud)
ghci> fmap ((:) 2) ([])
[]
Run Code Online (Sandbox Code Playgroud)
我本来以为更换pure[]用[]的fmap ((:) 2) (pure [])会导致同样的结果..谁可以解释的差异吗?