Foldable是一个超类Traversable,类似于Functor超类的Applicative和Monad.
类似的情况下Monad,它可以基本上实现fmap为
liftM :: Monad m => (a->b) -> m a -> m b
liftM f q = return . f =<< q
Run Code Online (Sandbox Code Playgroud)
我们也可以效仿foldMap的
foldLiftT :: (Traversable t, Monoid m) => (a -> m) -> t a -> m
foldLiftT f = fst . traverse (f >>> \x -> (x,x))
-- or: . sequenceA . fmap (f >>> \x -> (x, x))
Run Code Online (Sandbox Code Playgroud)
使用Monoid m …