
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.h... 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.