[Haskell-cafe] IO, sequence, lazyness, takeWhile
Jacek Generowicz
jacek.generowicz at cern.ch
Sun Dec 19 22:18:59 CET 2010
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?
More information about the Haskell-Cafe
mailing list