On 2010 Dec 19, at 20:10, Brandon S Allbery KF8NH wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 12/13/10 09:15 , Jacek Generowicz wrote:
untilQuit' = (fmap (takeWhile (/= "quit"))) (sequence $ map (>>=
report)
(repeat getLine))
-- The latter version shows the report, but it doesn't stop at the
-- appropriate place, so I'm guessing that I'm being bitten by my
-- ignorance about the interaction of actions and lazyness.
The reason this doesn't stop where you expect it to is that sequence
is
effectively strict
That would explain it. Thank you.
Where is this fact documented? I mostly rely on Hoogle, which gets me to
http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v
:sequence
which says nothing about strictness.
How could I have known this without having to bother anyone else?
You want the stop condition between the map-report and the repeat-
getLine.
Or, more generally speaking, between sequence, and whatever generates
the infinite list. But can this be done in a similar style? Could I
still use takeWhile and somehow lift it into IO?
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe