packages feed

newtype-deriving-0.1.0: demo/Main.hs

{-# 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