ghc-exactprint-0.2: tests/examples/DerivingOC.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-- from https://ocharles.org.uk/blog/guest-posts/2014-12-15-deriving.html
import Data.Data
import Control.Monad.IO.Class
import Control.Monad.Reader
import Control.Monad.State
data MiniIoF a = Terminate
| PrintLine String a
| ReadLine (String -> a)
deriving (Functor)
-- data List a = Nil | Cons a (List a)
-- deriving (Eq, Show, Functor, Foldable, Traversable)
data List a = Nil | Cons a (List a)
deriving ( Eq, Show
, Functor, Foldable, Traversable
, Typeable, Data)
data Config = C String String
data AppState = S Int Bool
newtype App a = App { unApp :: ReaderT Config (StateT AppState IO) a }
deriving (Monad, MonadReader Config,
MonadState AppState, MonadIO,
Applicative,Functor)