Skip to content

Instantly share code, notes, and snippets.

@amothic
Last active December 19, 2015 10:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amothic/5938617 to your computer and use it in GitHub Desktop.
Save amothic/5938617 to your computer and use it in GitHub Desktop.
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.HTTP.Types (status200, status404)
import Network.Wai.Handler.Warp (run)
import Control.Monad.Trans (lift)
import Data.IORef (newIORef, atomicModifyIORef)
import Data.ByteString.Lazy.UTF8 (fromString)
application counter request = function counter
where
function = routes $ pathInfo request
routes path = findRoute path routeSetting
findRoute path [] = notFound
findRoute path ((p,f):xs)
| path == p = f
| otherwise = findRoute path xs
routeSetting = [([], index),
(["hello"], hello),
(["welcome","world"],world)]
notFound _ = return $
responseLBS status404 [("Content-type", "text/html")] $ "404 - File Not Found"
index _ = return $
responseLBS status200 [("Content-type", "text/html")] $ "index page"
hello _ = return $
responseLBS status200 [("Content-type", "text/html")] $ "hello, my name is Tom"
world counter = do
count <- lift $ incCount counter
return $ responseLBS status200 [("Content-type", "text/html")] $
fromString $ show count
incCount counter = atomicModifyIORef counter (\c -> (c+1, c))
main = do
counter <- newIORef 0
run 3000 $ application counter
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment