[Haskell-cafe] >>= definition for list monad in ghc
Daniel Fischer
daniel.is.fischer at googlemail.com
Mon May 16 11:18:11 CEST 2011
On Monday 16 May 2011 11:07:15, 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
It is indeed, otherwise at least one of them would be wrong.
> (correct me if I'm wrong), so I was wondering why this definition was
> chosen instead of the other one. Does anybody know?
I don't *know*, but I suspect it's for efficiency, writing
concat (map k m)
might not be unfolded enough to make foldr/build fusion fire in cases where
it applies.
I'm just guessing, though.
>
> Thanks in advance,
>
> Mike
More information about the Haskell-Cafe
mailing list