Thanks Eugene and Ozgur.
I also looked on the side of IORef, but it doesn't looked to be a good solution since we have to use unsafePerformIO.
I have a big program to modify, and I want to pass some new data to existing functions of type IO(). I'd like to avoid changing all the function's types down the chain... What is the best way to do that?
One can use an IORef to get a similar effect.On 29 August 2012 10:21, Corentin Dupont <corentin.dupont@gmail.com> wrote:f,g :: IO ()
f = withFile "toto" WriteMode (flip hPutStr "42")
g = withFile "toto" ReadMode hGetLine >>= (\s -> putStrLn $ "Answer:" ++ s)
main = f >> g
Is it possible to do the same without files (the types must remain IO())?import Data.IORefimport System.IO.Unsafe{-# NOINLINE toto #-}toto :: IORef Stringtoto = unsafePerformIO (newIORef "")f,g :: IO ()f = writeIORef toto "42"g = readIORef toto >>= (\s -> putStrLn $ "Answer:" ++ s)main = f >> gHTH,Ozgur