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 _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
