[Haskell-cafe] mapM_ -> Monoid.Monad.map

Joachim Breitner mail at joachim-breitner.de
Fri Jan 23 16:30:24 EST 2009


Hi,

Am Freitag, den 23.01.2009, 21:50 +0100 schrieb Henning Thielemann:
>   However our recent Monoid discussion made me think about mapM_, 
> sequence_, and friends. I think they could be useful for many monads if 
> they would have the type:
>   mapM_ :: (Monoid b) => (a -> m b) -> [a] -> m b
>    I expect that the Monoid instance of () would yield the same efficiency 
> as todays mapM_

will it? This is based on a naive, not well-founded understanding of
haskell evaluation, but looking at
> instance Monoid () where
>	mempty        = ()
>	_ `mappend` _ = ()
>	mconcat _     = ()
I’d assume that evaluating
> mapM_ (putStrLn) lotsOfLargeStrings
with your proposed mapM_ will leave a thunk equivalent to
> () `mappend` () `mappend` () `mappend`...
in memory until the mapM_ has completely finished, where each () is
actually an unevalutated thunk that still has a reference to one of the
elements in the lotsOfLargeStrings list.

Greetings,
Joachim

-- 
Joachim "nomeata" Breitner
  mail: mail at joachim-breitner.de | ICQ# 74513189 | GPG-Key: 4743206C
  JID: nomeata at joachim-breitner.de | http://www.joachim-breitner.de/
  Debian Developer: nomeata at debian.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Dies ist ein digital signierter Nachrichtenteil
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20090123/1369277e/attachment.bin


More information about the Haskell-Cafe mailing list