[Haskell] IORef sharing

Jake Mcarthur jake at pikewerks.com
Mon Oct 27 23:34:02 EDT 2008


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Oct 27, 2008, at 7:25 PM, Rodney D Price wrote:

> Perhaps my mental picture is a little less flawed,
> now, but this brings up something about the IO
> monad that has always bothered me.  Papers on the
> IO monad say things like "A term of type IO ()
> denotes an action, but does not necessarily perform
> the action." (Wadler, "How to Declare an Imperative")
> Or, "putc '!' denotes the command that, if it is ever
> performed, will print an exclamation mark."

I like to think of the IO monad as a lazy imperative program  
generator. That is, the runtime lazily evaluates actions as they are  
needed, perhaps as though main is a (potentially infinite) lazy list  
of actions. In my mental model, runtime basically works like:

     What should I do first? *evaluate first action* *perform action*
     What should I do next? *evaluate next action* *perform action*
     What should I do next? *evaluate next action* *perform action*
     What should I do next? *evaluate next action* *perform action*
     ...

- - Jake
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)

iEYEARECAAYFAkkGiCoACgkQye5hVyvIUKkBhACgsT4zg5D+FBkLx7+qBu4xcWvF
gYwAnR+wrDdipCHAhJP2cTNcoq54ZklU
=OM1+
-----END PGP SIGNATURE-----


More information about the Haskell mailing list