On Mon, 4 Feb 2008, 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 so, why? I've
> even done s/fmap/liftM/g and s/liftM/fmap/g in the past for
> consistency =).

Problem is that from the idea Functor is a superclass of Monad, with the
property that "fmap == liftM". The first relation could have been
expressed in Haskell 98 but was not done (forgotten?) in the standard
libraries. The second relation can even not be expressed in Haskell 98. So
it's only cosmetic, if you use 'liftM' instead of 'fmap' in order to avoid
an explicit 'Functor' constraint in a function.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to