{-# LANGUAGE TemplateHaskell, QuasiQuotes, OverloadedStrings #-} module Main where import Control.Applicative ((<$>)) import Control.Monad (msum) import Happstack.Server import Happstack.Server.HSP.HTML import HSP import Language.Haskell.HSX.QQ import Web.Routes import Web.Routes.TH import Web.Routes.XMLGenT import Web.Routes.Happstack data SiteURL = Monkeys Int deriving (Eq, Ord, Read, Show) $(derivePathInfo ''SiteURL) monkeys :: Int -> RouteT SiteURL (ServerPartT IO) Response monkeys n = do html <- defaultTemplate "monkeys" () $ [hsx| <%> You have <% show n %> monkeys. Click here for more. |] ok $ (toResponse html) route :: SiteURL -> RouteT SiteURL (ServerPartT IO) Response route url = case url of (Monkeys n) -> monkeys n site :: Site SiteURL (ServerPartT IO Response) site = setDefault (Monkeys 0) $ mkSitePI (runRouteT route) main :: IO () main = simpleHTTP nullConf $ msum [ dir "favicon.ico" $ notFound (toResponse ()) , implSite "http://localhost:8000" "" site ]