maid-2010.4.24: src/maid.hs
{-# 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