[Haskell-beginners] fmap versus bind

Patrick LeBoutillier patrick.leboutillier at gmail.com
Tue May 3 17:32:14 CEST 2011


Hi all,

On Mon, May 2, 2011 at 9:56 PM, Sean Perry <shaleh at speakeasy.net> wrote:
> i came across hlint today and ran it on my experiments. It pointed out places where I was overly cautious with parens or used a $ and forget to remove it later. But one suggestion it made I was curious about.
>
> Why does it recommend using fmap over >>=? Idiomatically does fmap make more sense when the Monad is more like a collection?
>
> For instance I had "(applyOp op x y) >>= (flip (:) ds)". This seems more clear than "fmap ((:) ds) (applyOp op x y)".


I'm trying to understand this example and I can't get the types to line up.
Can you provide the "real" types for ds and (applyOp op x y)?

This is what I'm working out:

     fmap ((:) ds) (applyOp op x y)
== fmap (ds :) (applyOp op x y)
== fmap (\dss -> ds : dss) (applyOp op x y)

      (applyOp op x y) >>= (flip (:) ds)
== (applyOp op x y) >>= (: ds)
== (applyOp op x y) >>= (\d -> d : ds)


To my untrained eyes is doesn't even look like the code is doing the
same thing...
What am I missing here (or more probably where is my mistake)?


Patrick

> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>



-- 
=====================
Patrick LeBoutillier
Rosemère, Québec, Canada



More information about the Beginners mailing list