Creighton Hogg wrote:
x is a String, getLine has type IO String. That's what I
was getting at in one of my last e-mails.
Hmm... let's see if I understand:
* getLine() has type IO String.
* The <- will "convert" an IO String to a plain String
* So if I do x <- getLine() then x has the type String.
So, the <- effectively ammounts to an IO a -> a conversion.
In another email John Hughes said that one could think of "IO a" as a
set of instructins for obtaining a. I guess that means that IO is a sort
of imperative layer that helps the purely functional code interact with
the outside world.
So I can have an IO bit (e.g. a do-block) that calls functions (which
are purely functional code) but I can't have a function that executes
any IO.
For example, it is not possible to write a function "my_read_file" that
could work like this:
my_data = my_read_file("my_file.txt")
Correct? Otherwise this would be a function that is not referentially
transparent.
Cheers,
Daniel.
--
/\/`) http://oooauthors.org
/\/_/ http://opendocumentfellowship.org
/\/_/
\/_/ I am not over-weight, I am under-tall.
/
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe