[Haskell-cafe] ST and Transformers
Pepe Iborra
mnislaih at gmail.com
Fri Dec 22 12:44:54 EST 2006
Hi J Garrett,
I don't see any problem in GHC 6.6. with:
> runTest c = runST (runErrorT c)
*Main> runTest (return True)
Loading package mtl-1.0 ... linking ... done.
Right True
*Main>
On the other hand, I try to define it firstly as below and got the
following error.
> runTest = runST . runErrorT
Couldn't match expected type `forall t. Test t r'
against inferred type `ErrorT e m a'
Expected type: (forall t. Test t r) -> forall s. ST s a1
Inferred type: ErrorT e m a -> m (Either e a)
In the second argument of `(.)', namely `runErrorT'
In the expression: runST . runErrorT
Rank-2 types seem to interact badly with (.) and ($), but my type
theory educated neuron doesn't know why. I think this is folklore
knowledge?
Cheers
pepe
On 22/12/2006, at 18:26, J. Garrett Morris wrote:
> Hello everyone,
>
> I recently found myself attempting to use ST at the base of a stack of
> transformers, ala:
>
> type Test t r = ErrorT String (ST t) r
>
> I imagined, given the type of ST, that I would need a run function
> along the lines of:
>
> runTest :: (forall t. Test t r) -> Either String r
>
> (which was, in fact, exactly what I wanted). Unfortunately, even with
> that type signature, I can't find a way to convince the compiler that
> the state thread is properly universal in the call to runST. Is it
> possible to write this function, or is ST (and other monads that use
> its style of threading) not transformable?
>
> Thanks,
> /g
>
> --
> It is myself I have never met, whose face is pasted on the
> underside of my mind.
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
More information about the Haskell-Cafe
mailing list