Mercurial > hg > Members > toma > osc2013
changeset 10:bf2da4395b5f default tip
add example
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 06 Jul 2013 15:04:57 +0900 |
parents | 95fa8bea3364 |
children | |
files | prog/example.hs prog/routes.hs |
diffstat | 2 files changed, 43 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prog/example.hs Sat Jul 06 15:04:57 2013 +0900 @@ -0,0 +1,43 @@ +{-# 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 +
--- a/prog/routes.hs Sat Jul 06 15:04:02 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -{-# 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 = - let - function = routes $ pathInfo request - in - function counter - -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 -