module Network.Miku.Type where import Control.Monad.Reader import Control.Monad.State import Data.Default import Hack2 import Hack2.Contrib.Utils import Network.Miku.Middleware.MikuRouter import Data.ByteString.Lazy.Char8 (ByteString) type RoutePathT a = (RequestMethod, ByteString, a) type RoutePath = RoutePathT AppUnit type AppReader = Env type AppState = Response type AppUnitT = ReaderT AppReader (StateT AppState IO) type AppUnit = AppUnitT () type RouterT a = ByteString -> (a -> Application) -> RoutePathT a -> Middleware type Router = RouterT AppUnit data RouteConfig = RouteConfig { route_path :: RoutePath , router :: Router } data Miku = Miku { current_router :: Router , routes :: [RouteConfig] , middlewares :: [Middleware] , mimes :: [(ByteString, ByteString)] } instance Default Miku where def = Miku { current_router = miku_router , routes = def , middlewares = [dummy_middleware] , mimes = def } type UnitT a = State Miku a type Unit = UnitT ()