module Network.Loli.Type where import Control.Monad.Reader import Control.Monad.State import Data.Default import Hack import Hack.Contrib.Utils type RoutePathT a = (RequestMethod, String, a) type RoutePath = RoutePathT AppUnit type EnvFilter = Env -> Env type ResponseFilter = Response -> Response type Assoc = [(String, String)] type AppState = Response type AppReader = Env type AppUnitT = ReaderT AppReader (StateT AppState IO) type AppUnit = AppUnitT () type Context = Assoc data Loli = Loli { routes :: [RoutePath] , middlewares :: [Middleware] , mimes :: Assoc } instance Default Loli where def = Loli def [dummy_middleware] def type UnitT a = State Loli a type Unit = UnitT () class Template a where -- the only interface for template interpolate :: a -> String -> Context -> IO String