[Haskell-cafe] Problem with monad transformer stack

Bryan O'Sullivan bos at serpentine.com
Sun Oct 3 22:06:03 EDT 2010

On Sun, Oct 3, 2010 at 9:40 PM, Michael Vanier <mvanier42 at gmail.com> wrote:

> {- This doesn't work: -}
> newtype MyMonad a =
>  MyMonad ((StateT (MyData a) (Either SomeError) a))
>  deriving (Monad,
>            MonadState (MyData a),
>            MonadError SomeError,
>            Typeable)

This simply isn't allowed by the generalised newtype derivation machinery,
because the type variable "a" appears in one of the classes you're deriving.

In fact, I'm not sure how you're hoping for your type to actually work as a
monad. If you try using (>>=) on your type synonym that currently appears to
typecheck, you'll find that the only value that can inhabit the state
parameter is bottom. Try writing out and using a definition of (>>=) by hand
to understand your confusion.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20101003/63aa31cb/attachment.html

More information about the Haskell-Cafe mailing list