
29 Aug
2012
29 Aug
'12
5:43 a.m.
On 29 August 2012 10:21, Corentin Dupont
*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())?
One can use an IORef to get a similar effect. import Data.IORef import System.IO.Unsafe {-# NOINLINE toto #-} toto :: IORef String toto = unsafePerformIO (newIORef "") f,g :: IO () f = writeIORef toto "42" g = readIORef toto >>= (\s -> putStrLn $ "Answer:" ++ s) main = f >> g HTH, Ozgur