{-# LANGUAGE UndecidableInstances, TypeFamilies, FlexibleInstances, TemplateHaskell, GeneralizedNewtypeDeriving, MultiParamTypeClasses #-} module Main where import Prelude () import BasePrelude import NewtypeDeriving import Control.Monad.Base import Control.Monad.Trans.Control import Control.Monad.Trans.Class import Control.Monad.Trans.Either import Control.Monad.Trans.Maybe import Control.Monad.Trans.State import Control.Monad.Trans.Reader import Control.Monad.Trans.Writer main = return () newtype T m a = T (ReaderT Int (StateT Char (WriterT [Int] (EitherT String (MaybeT m)))) a) deriving (Functor, Applicative, Monad) monadTransInstance ''T monadTransControlInstance ''T monadBaseTransformerInstance ''T monadBaseControlTransformerInstance ''T