[Haskell-beginners] IO vars
eugene.perederey at gmail.com
Wed Aug 29 11:28:45 CEST 2012
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 at 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 at gmail.com>
>> On Wed, Aug 29, 2012 at 10:58 AM, Corentin Dupont
>> <corentin.dupont at 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
> Beginners mailing list
> Beginners at haskell.org
More information about the Beginners