[Haskell-cafe] Stack space overflow in HaskellNet

Henning Thielemann lemming at henning-thielemann.de
Wed Jul 27 00:50:53 CEST 2011


On Tue, 26 Jul 2011, Manfred Lotz wrote:

>>> main = do
> s> >  con <- connectIMAP imapServer
>>>  login con user pass
>>>  mboxes <- list con
>>>  mapM print mboxes
>>
>> This should be mapM_ and 'ghc -Wall' spots this problem since 6.12.
>
> The compiler (7.04) doesn't tell me anything about it.

It seems that it is no longer part of -Wall. But since this mistake is 
very common, I think it would be better. Problem is, that several 
libraries like parser libraries are designed for silently throwing away 
results.

You have to switch on -fwarn-unused-do-bind, according to
   http://www.haskell.org/ghc/docs/7.0-latest/html/users_guide/options-sanity.html

Also in case this does not fix your stack space overflow, (mapM_ print) is 
the correct (space-efficient) way.

> I'm not quite sure I understand what you mean. Stack overflow comes
> from this:
>        forM_ msgs (\x -> fetch con x >>= print)
>
> If I change it to:
>        mapM_  (\x -> fetch con x >>= print) msgs
>
> there is the same stack overflow.

forM_ and mapM_ are equal in this respect, the underscore is important.



More information about the Haskell-Cafe mailing list