[Haskell-cafe] >>= definition for list monad in ghc

Andrew Coppin andrewcoppin at btinternet.com
Mon May 16 20:03:12 CEST 2011

On 16/05/2011 10:07 AM, Michael Vanier wrote:
> Usually in monad tutorials, the >>= operator for the list monad is
> defined as:
> m >>= k = concat (map k m) -- or concatMap k m
> but in the GHC sources it's defined as:
> m >>= k = foldr ((++) . k) [] m
> As far as I can tell, this definition is equivalent to the previous one
> (correct me if I'm wrong), so I was wondering why this definition was
> chosen instead of the other one. Does anybody know?

Any time you see a more convoluted definition which ought to be 
equivilent to a simpler one, the answer is usually "because this way 
makes some important compiler optimisation fire". It's even possible 
that the optimisation in question would fire anyway now, but way back 
when the code was written, the compiler wasn't as smart.

More information about the Haskell-Cafe mailing list