On Mon, Jan 23, 2006 at 09:55:39PM +0100, Twan van Laarhoven wrote: > Is there any reason why IO should not be defined as: > > type IO a = ST RealWorld a > in implementations that support ST? > > This way IORef/STRef and IOArray/STArray can be merged. I know under the > hood they already share code, but this way they can also share an interface.
But IO isn't a state monad: others are concurrently changing the world without waiting for my Haskell program to terminate. Some compilers use a state monad to enforce sequencing, but a continuation monad or resumption monad would work just as well. However IO does include a state monad, so one could define (using IORegion instead of the presumptuous RealWorld): type IORef = STRef IORegion type IOArray = STArray IORegion type IOUArray = STUArray IORegion newIORef = stToIO . newSTRef ... _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell