[Haskell-cafe] generic putback

Sergey Mironov ierton at gmail.com
Tue May 17 12:45:31 CEST 2011


Thanks for your answers! I looked further and found that 'Oleg alredy
did it'. Really, looks like iteratees will suit my needs :) I'm sorry
for bothering.

Sergey

2011/5/15 Daniel Gorín <dgorin at dc.uba.ar>:
> I think you need to change the type of putback slightly:
>
> import Data.IORef
>
> putback :: a -> IO a -> IO (IO a)
> putback a action =
>   do next <- newIORef a
>      return (do r <- readIORef next; writeIORef next =<< action; return r)
>
> main =
>   do getChar' <- putback 'a' getChar
>      str <- sequence $ take 10 $ repeat getChar'
>      putStrLn str
>
> Thanks,
> Daniel
>
> On May 15, 2011, at 4:33 PM, Sergey Mironov wrote:
>
>> Hi Cafe. I wonder if it is possible to write a IO putback function
>> with following interface
>>
>> putback :: a -> IO a -> IO a
>> putback x io = ???
>>
>>
>> where io is some action like reading from file or socket.
>> I want putback to build new action which will return x on first call,
>> and continue executing io after that.
>>
>> Thanks in advance!
>> Sergey.
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>



More information about the Haskell-Cafe mailing list