Am Donnerstag, 4. August 2005 11:09 schrieben Sie:
> On Thu, 2005-08-04 at 10:58 +0200, Wolfgang Jeltsch wrote:
> > Am Donnerstag, 4. August 2005 10:21 schrieb Axel Simon:
> > > [...]
> > >
> > > Nowadays, you can use one of the MonadState monad
> >
> > State transformer monads like State and StateT can be implemented without
> > using special language features.  So there was always the opportunity to
> > implement something like State or StateT.  So, in a way, we always could
> > use the MonadState monads.  If ST could be replaced by MonadState monads,
> > ST had never been included in the libraries, I suppose.
>
> Well, MonadState needs multi-parameter type classes, and hence, require
> much more than ST.

The class MonadState needs multi-parameter type classes but the monads State 
and StateT don't.  If you switch the state and monad argument of StateT, you 
can also create a class which is a bit less flexible than MonadState but 
which nevertheless allows State and StateT to be instances of it:

        class StateMonad sm where
                put :: s -> sm s ()
                get :: sm s s

        instance StateMonad State where
                ...

        instance Monad m => StateMonad (StateT m) where
                ...

Note that sm in the class declaration has kind * -> *.

So, multi-parameter classes have nothing to do with the ability to implement 
monads like State and StateT.  These are just implemented as equivalent to 
ordinary functions via newtype.

> [...]

> However, I am not quite convinced that using ST has any advantages over
> using IO directly.

Of course, it has.  As someone already pointed out, you can hide the 
imperativeness of a ST-implemented algorithm behind a purely functional 
interface by using runST.

> [...]

> Thanks for you comment,
> Axel.

Your welcome.

Best regards,
Wolfgang
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to