[Haskell-cafe] ANNOUNCE: pqueue-mtl, stateful-mtl
Josef Svenningsson
josef.svenningsson at gmail.com
Mon Feb 16 08:44:21 EST 2009
On Mon, Feb 16, 2009 at 2:30 AM, wren ng thornton <wren at freegeek.org> wrote:
> Louis Wasserman wrote:
>>
>> I follow. The primary issue, I'm sort of wildly inferring, is that use of
>> STT -- despite being pretty much a State monad on the inside -- allows
>> access to things like mutable references?
>
> That's exactly the problem. The essential reason for ST's existence are
> STRefs which allow mutability.
>
I'd like to point out one other thing that ST provides, which is often
forgotten. It provides *polymorphic* references. That is, we can
create new references of any type.
So ST is a really magical beast. Not only does it provide mutation, it
also provides mutable references. And these are two different
features. Now, everyone agrees that mutation is not something that you
can implement in a functional language, so ST cannot be implemented in
Haskell for that reason. It has to be given as a primitive. But what
about polymorphic references? Can they be implemented in Haskell? The
Claessen conjecture (after Koen Claessen) is that they cannot be
implemented in Haskell. See the following email for more details:
http://www.haskell.org/pipermail/haskell/2001-September/007922.html
One could try and separate mutation and polymorphic references and
give them as two different primitives and implement ST on top of that.
But I haven't seen anyone actually trying that (or needing it for that
matter).
Cheers,
Josef
More information about the Haskell-Cafe
mailing list