-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathExampleRegular.hs
More file actions
39 lines (29 loc) · 852 Bytes
/
Copy pathExampleRegular.hs
File metadata and controls
39 lines (29 loc) · 852 Bytes
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
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE EmptyDataDecls #-}
import Web.Zwaluw
import Web.Zwaluw.Regular
import Prelude hiding (id, (.), (/))
import Control.Category
-- A datatype modelling all pages in a website.
data Sitemap
= Home
| UserOverview
| UserDetail Int
| Article Int String
deriving (Eq, Show)
$(deriveAll ''Sitemap "PF_Sitemap")
type instance PF Sitemap = PF_Sitemap
Z rHome :& Z rUserOverview :& Z rUserDetail :& Z rArticle = mkRouters
-- The router. Specifies how to parse a URL into a Sitemap and back.
sitemap :: Router r (Sitemap :- r)
sitemap = id /
( rHome
<> "users" . users
<> rArticle . ("article" / int . "-" . part)
)
where
users = rUserOverview
<> rUserDetail / int