Of course, not. What you do with a file is a sequence of side effects done by f, then g. If you want to reuse the value of type IO a returned by f, your g function would need to have type g:: a->IO () so that you combine the actions: f >>= g On 29 August 2012 02:21, Corentin Dupont <corentin.dupont@gmail.com> wrote:
Hi Mihai, maybe the term "thread" in my mail is not correct. What I mean is that a value gets stored by f and discovered by g.
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())?
On Wed, Aug 29, 2012 at 11:04 AM, Mihai Maruseac <mihai.maruseac@gmail.com> wrote:
On Wed, Aug 29, 2012 at 10:58 AM, Corentin Dupont <corentin.dupont@gmail.com> wrote:
Hi all, there is something very basic that it seems escaped me. For example with the following program f and g have type IO () and I can thread a value between the two using a file. Can I do the exact same (not changing the types of f and g) without a file?
f,g :: IO () f = withFile "toto" WriteMode (flip hPutStr "toto") g = withFile "toto" ReadMode hGetLine >>= putStrLn main = f >> g
Of course:
f,g :: IO () f = putStr "Answer: " g = print 42
Main> f >> g Answer: 42
The () is threaded by >>, not the file content
-- MM
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- Best, Eugene Perederey