[Haskell-cafe] Stacking monads
Ryan Ingram
ryani.spam at gmail.com
Thu Oct 2 19:48:51 EDT 2008
> If your datatype with a Monad instance also has a Functor instance (which it *can* have, you just need to declare the instance), then liftM is equivalent to fmap.
Only if you ignore efficiency issues, of course. Some monads have an
fmap which is significantly faster than bind.
liftM f m = do
a <- m
return (f a)
Consider []; this becomes
liftM f m
= m >>= \a -> return (f a)
= concatMap (\a -> [f a]) m
which, in the absence of other optimizations, is going to do a lot
more allocation and branching than fmap
fmap f m
= map f m
-- ryan
More information about the Haskell-Cafe
mailing list