module Network.Loli.DSL where import Control.Monad.Reader import Control.Monad.State import Hack import Hack.Contrib.Middleware.Config import Hack.Contrib.Middleware.Static import MPS import Network.Loli.Config import Network.Loli.Engine import Network.Loli.Type import Network.Loli.Utils import Prelude hiding ((.), (>), (^)) import qualified Control.Monad.State as State app :: Application -> AppUnit app f = ask >>= (f > io) >>= State.put layout :: String -> Unit layout x = middleware $ config (set_namespace loli_config loli_layout x) views :: String -> Unit views x = middleware $ config (set_namespace loli_config loli_views x) get, put, delete, post :: String -> AppUnit -> Unit get = route GET put = route PUT delete = route DELETE post = route POST middleware :: Middleware -> Unit middleware x = add_middleware x .update mime :: String -> String -> Unit mime k v = add_mime k v .update public :: Maybe String -> [String] -> Unit public r xs = middleware $ static r xs io :: (MonadIO m) => IO a -> m a io = liftIO context :: Assoc -> AppUnit -> AppUnit context = put_namespace loli_locals > local bind :: String -> String -> AppUnit -> AppUnit bind k v = context [(k, v)] captures, locals :: AppUnitT Assoc captures = ask ^ namespace loli_captures locals = ask ^ namespace loli_locals