Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 40 lines (29 sloc) 0.852 kb
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
Something went wrong with that request. Please try again.