On Sun, Feb 15, 2009 at 9:20 PM, Dan Doel
<dan.doel@gmail.com> wrote:
On Sunday 15 February 2009 9:44:42 pm Louis Wasserman
wrote:
> Hello all,
>
> I just uploaded stateful-mtl and
pqueue-mtl 1.0.1. The ST monad
> transformer and array transformer
have been removed -- I've convinced
> myself that a heap transformer
backed by an ST array cannot be
> referentially transparent -- and the
heap monad is now available only as a
> basic monad and not a
transformer, though it still provides priority queue
> functionality to
any of the mtl wrappers around it. stateful-mtl retains a
>
MonadST typeclass which is implemented by ST and monad transformers
around
> it, allowing computations in the the ST-bound heap monad to
perform ST
> operations in its thread.
>
> Since this
discussion had largely led to the conclusion that ST can only be
> used
as a bottom-level monad, it would be pretty uncool if ST computations
>
couldn't be performed in a monad using ST internally because the ST
thread
> was hidden and there was no way to place ST computations
'under' the outer
> monad. Anyway, it's essentially just like the
MonadIO typeclass, except
> with a functional dependency on the state
type.
>
> There was a question I asked that never got answered,
and I'm still
> curious: would an ST *arrow* transformer be valid?
Arrows impose
> sequencing on their operations that monads
don't... I'm going to test out
> some ideas, I
think.
Your proposed type:
State (Kleisli []) x y =
(s, x) -> [(s, y)]
is (roughly) isomorphic to:
x ->
StateT s [] y = x -> s -> [(s, y)]
The problem with an ST
transformer is that the state parameter needs to be
used linearly, because
that's the only condition under which the optimization
of mutable update is
safe. ST ensures this by construction, as opposed to
other languages
(Clean) that have type systems that can express this kind of
constraint
directly. However, with STT, whether the state parameter is used
linearly
is a function of the wrapped monad. You'd have to give a more fleshed
out
version of your proposed state arrow transformer, but off the top of
my
head, I'm not sure it'd be any better.
--
Dan