[Haskell] Re: ST/STRef vs. IO/IORef

Till Mossakowski till at informatik.uni-bremen.de
Fri Aug 5 02:04:53 EDT 2005

Sebastian Sylvan wrote:
> On 8/4/05, Till Mossakowski <till at informatik.uni-bremen.de> wrote:
>>Remi Turk wrote:
>>>MonadState needs multi-parameter type classes, State and StateT
>>>don't. And ST needs rank-2 types (or at least one rank-2
>>>constant) and, to be implemented _efficiently_, also needs
>>>something like unsafePerformIO (or even lower-level unsafe
>>>mutable state primitives).
>>>I think one could call the ST monad a safe yet still efficient
>>>variant of unsafePerformIO + IORef's + IOArray's.
>>No, the point of ST is that it is safe (as opposed to unsafePerformIO),
>>but still has the advantages of being both efficient and allowing
>>purely functional encapsulation via runST (as oppesed to IORefs
>>and IOArrays). The only price is that you need rank-2 polymorphism
>>and new language primitives for creating, reading and writing
>>references. But using these primitives is much better than using
>>unsafePerformIO - the latter entails a lot of harmful things.
> Hmmm... Wasn't that what he said?

I disagree with the equation "primitives = unsafe" that
is implicit in sentence

  to be implemented _efficiently_, also needs
  something like unsafePerformIO (or even lower-level unsafe
  mutable state primitives).

The point is that ST uses *safe* primitives, and not "something
like unsafePerformIO".
To clarify things, here a little table about different possibilities
of using arrays in Haskell:

               MonadState  IOArray IOArray          ST
               with                with             with
               FiniteMap           unsafePerformIO  MutArr

safe           yes        yes         no            yes

efficient      no         yes         yes           yes

allows         yes        no          yes           yes

avoids         yes        no          no            no

avoids         yes        yes         yes           no
rank 2

Till Mossakowski               Phone +49-421-218-4683
Dept. of Computer Science      Fax +49-421-218-3054
University of Bremen           till at tzi.de
P.O.Box 330440, D-28334 Bremen http://www.tzi.de/~till

More information about the Haskell mailing list