[jhc] Monad.ST

Isaac Dupree ml at isaac.cedarswampstudios.org
Sun Nov 15 14:45:11 EST 2009


John Meacham wrote:
> On Sat, Nov 14, 2009 at 04:15:40PM -0800, John Meacham wrote:
>> In jhc, we would use something similar to what ghc does. the current IO
>> definition is:
>>
>> newtype IO a = IO (World__ -> (# World__, a #))
>>
>> So, the only difference would be ST takes any state, not just the world,
>> or
>>
>> newtype ST s a = ST (s -> (# s, a #))
> 
> It occurs to me that something like this would be closer to the ghc
> way..
> 
>> data State s :: #
>> newtype ST s a = ST (State s -> (# State s, a #))
> 
> then making IO
> 
>> newtype IO a = ST World__ a
> 
> but just the newtype around IO is probably a better first pass as it
> won't require mucking with the IO implementation. Plus it will be
> portable to other compilers that have unsafePerformIO...

well, it would be nice for such a "portable" implementation to exist... 
  However, unsafePerformIO is often slower than an ST implementation has 
the potential to be (e.g. in GHC unsafePerformIO contains lots of 
safe-guards, each of which has been added after painful experience but 
which are not needed for ST itself).

-Isaac


More information about the jhc mailing list