On Sun, Mar 1, 2009 at 4:28 AM, Will Ness <will_n48@yahoo.com> wrote:
Michael Easter <codetojoy <at> gmail.com> writes:
...
After all, we can have a definition of such a value, and have it run multiple
times for us, so _as definition_ it's no different than any other definition in
Haskell. It's just that _its value_ can cause the system to actually perform
these IO actions in some circumstances.

But it isn't a definition.  "Reference" would be better; "getChar" is a term that references a value.

As for terminology: we've got to have some special name for functions that are
chainable by bind. Calling them actions confuses them with the real world
actions performed by IO.

Correction:  special name for IO "functions" (actually "IO terms" would be better).  The monad just organizes stuff, so the IO monad, as monad, is no different than any other monad.

May be to call them "action functions"?

This was a big problem for me; I find terms like "action", "computation", "function" completely misleading for IO terms/values.  You might find "Computation" considered harmful. "Value" not so hot either useful; see also the comment "Another try at the key sentence".  There are a few other articles on the blog that address this terminology problem.

-gregg