Someone asked about comparing monads to loops.

If you are chiefly familiar with the i/o and state monads, that doesn't
really make a lot of sense, but there IS a use of monads which IS a kind
of loop.

Only yesterday I was trying to read someone else's Haskell code where
they had imported Control.Monad for the sake of >>= and liftM2.  And
how were they using >>= and liftM2?

 - they were using >>= on lists, where it means the same as concatMap

    To a beginner, I suggest that (concatMap f xs) is clearer than
    (xs >>= f)

 - they were using (liftM2 f xs ys) on lists, where it means the same
   as
        [f x y | x <- xs, y <- ys]

No doubt there are people who find the monadic versions clearer.
However, since the monadic operations *ARE* loops when applied to lists,
it could very easily give rise to the misunderstanding that monads have
something to do with looping.


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to