Implementing RefMonads in Haskell without ST,IO

Josef Svenningsson josefs@cs.chalmers.se
Mon, 2 Jun 2003 14:23:56 +0200 (MET DST)


Hi,

There was an email about this some time ago which discussed this problem
for the special case of the ST-monad:

http://www.haskell.org/pipermail/haskell/2001-September/007922.html

What I really would like to see is a proof that such refmonads cannot be
encoded in pure Haskell.

Cheers,

	/Josef

On Thu, 29 May 2003, Tim Sweeney wrote:

> Given the common definition of RefMonad:
>
> class Monad m => RefMonad m r | m -> r where
>     newRef :: a -> m (r a)
>     readRef :: r a -> m a
>     writeRef :: r a -> a -> m ()
>
> Is it possible to actually implement a working instance of RefMonad in
> Haskell, without making use of a built-in monad like IO or ST?  If so,
> I'd love any tips -- I've been making good use of monads for a while,
> but can't figure this one out.
>
> The Java programmer in me wants to implement RefMonad by passing
> around a function from integers (think of them as pointers or heap
> indices) to "objects", and in readRef, "cast" the "object" to the
> appropriate type "t".
>
> If it's not possible to implement a typesafe RefMonad instance
> directly in Haskell, without making use of built-in imperative
> features like IO, then doesn't this refute the claims that monads
> implement imperative features functionally?
>
> -Tim