{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE NamedFieldPuns #-} import Network.Loli (loli, public, mime) import Hack.Handler.Hyena import System (getArgs) import MPS (splash, (/), (-)) import Data.Default (def) import Hack.Contrib.Mime import Hack import Prelude hiding ((/), (-), (>)) import Data.Map (toAscList) main :: IO () main = do args <- getArgs let { port = if length args == 0 then 3000 else read - head args } let { app = try_index - loli - do public (Just ".") [""] mapM_ (splash mime) (toAscList mime_types) } putStrLn "" putStrLn - "\226\157\130 Maid serving on port: " ++ show port putStrLn "" runWithConfig def {port} - app where try_index app = \env -> do r <- app env if status r == 404 then do r' <- app (env {pathInfo = pathInfo env / "index.html"}) if status r' == 404 then do r'' <- app (env {pathInfo = pathInfo env / "index.htm"}) if status r'' == 404 then return r else return r'' else return r' else return r