/
WebRoutes.hs
47 lines (37 loc) · 1.15 KB
/
WebRoutes.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{-# LANGUAGE TemplateHaskell, TypeOperators, OverloadedStrings #-}
import Prelude hiding (id, (.))
import Data.Text (Text)
import Control.Category (Category(id, (.)))
import Control.Monad.Trans (MonadIO(liftIO), lift)
import Text.Boomerang.TH (makeBoomerangs)
import Web.Routes (Site(..), RouteT(..), decodePathInfo, encodePathInfo, runSite, showURL)
import Web.Routes.Boomerang (Router, (<>), (</>), int, parse1, boomerangSiteRouteT, anyText, parseTexts)
import Web.Wheb hiding ((</>))
-- | the routes
data Sitemap
= Home
| UserOverview
| UserDetail Int
| Article Int Text
deriving (Eq, Show)
$(makeBoomerangs ''Sitemap)
sitemap =
( rHome
<> "users" . users
<> rArticle . ("article" </> int . "-" . anyText)
)
where
users = rUserOverview
<> rUserDetail </> int
handle url = case url of
Home -> lift handleHome
_ -> lift $ text $ spack url
site :: Site Sitemap MinHandler
site = boomerangSiteRouteT handle sitemap
handleHome :: MinHandler
handleHome = text "This is home."
main :: IO ()
main = do
opts <- genMinOpts $ do
addSite "/" site
runWhebServer opts