On Mon, Feb 9, 2009 at 10:17 PM, Richard O'Keefe <ok@cs.otago.ac.nz> wrote:

On 10 Feb 2009, at 5:07 pm, Gregg Reynolds wrote:
Thanks.  I see the error of my ways.  So, IO expressions must be evaluated if they are in the chain leading to main.


We need some standard terminology to distinguish
between *evaluating* an expression and *performing*
the result of an expression of type IO something.

Indeed.  Wrote a blog article about this proposing a semiotic approach:  http://syntax.wikidot.com/blog:4

An IO expression that is passed to a function at a
strict position must be evaluated whether the result
is performed or not.

An IO expression whose result will be performed must
be evaluated before that performance can take place.

Is the result of evaluation a thunk/suspension/closer?
 

(Dash it, this really is getting us into White Knight land.)

What's White Knight land?