[Haskell-cafe] MonadMemory class

Ariel J. Birnbaum valgarv at gmx.net
Thu Mar 27 20:03:12 EDT 2008

> (write r x >>= read) == (write r x >> return x)
You probably mean (write r x >> read r) == (write r x >> return x)?

> 3) References are independent:
> If m does not refer to r, then:
> (read r >>= (\x -> m >> return x)) == m >> read r
> (write r x >> m) == m >>= (\v -> write r x >> return v)
What if m writes to r' which is read by another thread, which in turn writes 
another value into r? 
What exactly does "does not refer to r" mean?

> It's possible without unsafeCoerce if you add a Typeable constraint or pass 
> a GADT type representation to new.
Care to develop?

> To be truly safe you need higher-rank types and use the same trick
> that ST does.
Here I was, naively thinking I could put off learning about that for now ;)

> But there's not much point; you may as well use ST. 
Not much *practical* point, I agree. I mostly asked out of curiosity.

> Handling garbage collection is tricky, though.
Can it even be done without compiler support?

Ariel J. Birnbaum

More information about the Haskell-Cafe mailing list