module Network.Miku.Type where import Control.Monad.Identity import Control.Monad.Reader import Control.Monad.State import Data.Monoid import Network.Wai type AppReader = Request type AppState = Response type AppMonadT t = ReaderT AppReader (StateT AppState t) type AppMonad = AppMonadT IO type AppMonad' = AppMonad () data MikuState = MikuState { middlewares :: [Middleware] , router :: [Middleware] } instance Monoid MikuState where mempty = MikuState [] [] mappend (MikuState x y) (MikuState x' y') = MikuState (x <> x') (y <> y') type MikuMonad = StateT MikuState Identity ()