Sebastian Sylvan wrote:
On 8/4/05, Till Mossakowski <[EMAIL PROTECTED]> 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
functional
encapsulation
avoids yes no no no
in-place-
update
primitives
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 [EMAIL PROTECTED]
P.O.Box 330440, D-28334 Bremen http://www.tzi.de/~till
_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell