[Haskell] threading mutable state through callbacks

Adrian Hey ahey at iee.org
Tue Oct 12 19:26:22 EDT 2004

On Tuesday 12 Oct 2004 10:19 pm, Jules Bean wrote:
> It does matter for general IO operations at the top level.

All I'm aiming for is to disambiguate programs (avoid the use of
unsafePerformIO) in such a way that the programmer at least stands a
reasonable chance of getting it right without compiler optimisations
screwing things up.

> Order
> doesn't matter in in any essential way for the particular case of
> newIORef, no.

Or for a great many other IO operations that a programmer may wish
to use, though certainly not all that he could define (if sufficiently
malicious :-) 

> Now it's my turn not to understand you. What is a "thing with identity"?

Basically I mean some packet of state, where is makes a difference
which particular packet of state is referenced.

So an IORef is a reference to a "thing with identity".
Of course this is why the type of newIORef is..

newIORef :: a -> IO (IORef a)

not simply..

newIORef :: a -> IORef a

Any new "thing with identity" has be constructed via something like..

newThing :: IO Thing

..which makes it difficult to create such things at the top level, even
though (as Simon M pointed out) there's no problem with actually using
such things at the top level (assuming we had some magic that enabled
their creation).

Adrian Hey

More information about the Haskell mailing list