packages feed

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