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.