{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE NoMonomorphismRestriction #-} module Hack.Contrib.Utils where import Hack import Hack.Contrib.Constants import MPSUTF8 import Prelude hiding ((.), (^), (>), lookup, (+), (/)) import Network.URI hiding (path) import Data.Default import Control.Arrow ((>>>), (<<<)) import qualified Data.Map as M import Data.Time import qualified Data.ByteString.Lazy.Char8 as B import Control.Monad (mplus, MonadPlus) import Data.Maybe import System.IO import System.Locale import System.FilePath (()) import Control.Category (Category) -- import Date.Time (>) :: (Control.Category.Category cat) => cat a b -> cat b c -> cat a c (>) = (>>>) infixl 8 > (+) :: (MonadPlus m) => m a -> m a -> m a (+) = mplus infixl 8 + (/) :: FilePath -> FilePath -> FilePath (/) = () infixl 5 / empty_app :: Application empty_app = return def -- usage: app.use [content_type, cache] use :: [Middleware] -> Middleware use = reduce (<<<) bytesize :: String -> Int bytesize = B.pack > B.length > from_i dummy_middleware :: Middleware dummy_middleware = id dummy_app :: Application dummy_app _ = return $ def { status = 500 } escape_html :: String -> String escape_html = concatMap fixChar where fixChar '&' = "&" fixChar '<' = "<" fixChar '>' = ">" fixChar '\'' = "'" fixChar '"' = """ fixChar x = [x] show_status_message :: Int -> Maybe String show_status_message x = status_code.M.lookup x httpdate :: UTCTime -> String httpdate x = x.format_time rfc822DateFormat where url2unicode :: String -> String url2unicode s = s.unEscapeString.b2u just_lookup :: (Ord k) => k -> M.Map k a -> a just_lookup s xs = xs.M.lookup s .fromJust -- MPS candidate