[Haskell-cafe] Problem with lazy IO
Maciej Piechotka
uzytkownik2 at gmail.com
Sat Jul 18 21:16:07 EDT 2009
Hello.
I've tried to combine lazy IO and parsec. The hole process is done by
network.
Currently I have implemented 'short parsers' so I enter them on need. To
update state I have following code:
parser2nntp :: Monad m => NntpParser m a -> NntpT m a
parser2nntp p = do s <- NntpT (gets $ input . connection)
e <- runParserT (do v <- p
i <- getInput
return (v, i)) () "" s
case e of
Left er -> error $ show er
Right (v, i') -> (NntpT (modify (pNI i')) >> return
v)
where pNI :: Monad m => ByteString ->NntpState m ->
NntpState m
pNI i s = s {connection = (connection s) {input =
i}}
However the 4 line (i <- getInput) blocks the execution as trace
indicated. String returned have no input available so it should block on
evaluation - and here I pass only a reference to it (or rather I think
so). What's wrong?
PS. Full code is in darsc nntp repository http://code.haskell.org/nntp/
- please note that it seems to require network compiled against parsec 3
- not 2.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20090718/50006493/attachment.bin
More information about the Haskell-Cafe
mailing list