[Haskell-cafe] fmap vs. liftM
derek.a.elkins at gmail.com
Mon Feb 4 11:32:08 EST 2008
On Mon, 2008-02-04 at 12:22 -0200, Felipe Lessa wrote:
> Hi there,
> Reading http://www.haskell.org/haskellwiki/Things_to_avoid I found an
> interesting saying:
> "By the way, in the case of IO monad the Functor class method fmap and
> the Monad based function liftM are the same."
> I always tought that
> prop :: (Functor m, Monad m, Eq (m b)) => (a -> b) -> m a -> Bool
> prop f x = fmap f x == liftM f x
> was True regardless of 'm'. Is there any exception?
If there is, it's a bug in the library except you wouldn't normally use
(==) but some meta-level equality*. From one perspective, liftM is the
proof that every monad is a functor.
* Usually observational equality, but one may want variants, e.g.
observational equality with respect to some "observe" function
More information about the Haskell-Cafe