[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