module Network.Loli.Type where
import Control.Monad.Reader
import Control.Monad.State
import Data.Default
import Hack
import Hack.Contrib.Utils
import Network.Loli.Middleware.LoliRouter
type RoutePathT a = (RequestMethod, String, a)
type RoutePath = RoutePathT AppUnit
type AppReader = Env
type AppState = Response
type AppUnitT = ReaderT AppReader (StateT AppState IO)
type AppUnit = AppUnitT ()
type Assoc = [(String, String)]
type Context = Assoc
type RouterT a = String -> (a -> Application) -> RoutePathT a -> Middleware
type Router = RouterT AppUnit
data RouteConfig = RouteConfig
{
route_path :: RoutePath
, router :: Router
}
data Loli = Loli
{
current_router :: Router
, routes :: [RouteConfig]
, middlewares :: [Middleware]
, mimes :: Assoc
}
instance Default Loli where
def = Loli loli_router def [dummy_middleware] def
type UnitT a = State Loli a
type Unit = UnitT ()
class Template a where
interpolate :: a -> String -> Context -> IO String