I would happily supply a patch to add the Typeable (and the few Data instances that can be made) to transformers. I had to make similar ones in my comonad-transformers package anyways.
-Edward Kmett On Wed, Feb 2, 2011 at 1:02 AM, John Millikin <jmilli...@gmail.com> wrote: > Is there any reasonable way to do this if I want to cast a monadic > value? For example: > > > castState :: (Typeable a, Typeable s, Typeable1 m, Typeable b) => a -> > Maybe (StateT s m b) > > castState = Data.Typeable.cast > > None of the common monad transformers declare instances of Typeable, > so I don't know if the concept itself even works. > > The use case here is one of my library users wants to return an > Iteratee from code running in "hint", which requires any extracted > values be typeable. My first attempt at an extension-free instance is > something like this: > > > import Data.Enumerator > > import Data.Typeable > > > > instance (Typeable a, Typeable1 m) => Typeable1 (Iteratee a m) where > > typeOf1 i = rep where > > typed :: (a -> b) -> b -> a -> a > > typed _ _ a = a > > > > ia :: a -> Iteratee a m b > > ia = undefined > > > > im :: m c -> Iteratee a m b > > im = undefined > > > > rep = mkTyConApp (mkTyCon "Data.Enumerator.Iteratee") [tyA, > tyM] > > tyA = typeOf (typed ia i undefined) > > tyM = typeOf1 (typed im i undefined) > > which, besides being ugly, I have no idea if it's correct. > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe