Zwaluw-0.1: Combinators for bidirectional URL routing

Web.Zwaluw

Contents

Synopsis

Types

data Router a b Source

Instances

data a :- b Source

Constructors

a :- b 

Instances

(Eq a, Eq b) => Eq (:- a b) 
(Show a, Show b) => Show (:- a b) 

(<>) :: Monoid m => m -> m -> mSource

Infix operator for mappend.

Running routers

parse :: Router () a -> String -> [a]Source

unparse :: Router () a -> a -> [String]Source

parse1 :: Router () (a :- ()) -> String -> [a]Source

unparse1 :: Router () (a :- ()) -> a -> [String]Source

Constructing routers

The constrN functions are helper functions to lift constructors of datatypes to routers. Their first argument is the constructor; their second argument is a (partial) destructor.

constr0 :: o -> (Maybe o -> Maybe ()) -> Router r (o :- r)Source

For example:

 nil :: Router r ([a] :- r)
 nil = constr0 [] $ \x -> do [] <- x; Just ()

constr1 :: (a -> o) -> (Maybe o -> Maybe a) -> Router (a :- r) (o :- r)Source

For example:

 left :: Router (a :- r) (Either a b :- r)
 left = constr1 Left $ \x -> do Left a <- x; return a

constr2 :: (a -> b -> o) -> (Maybe o -> Maybe (a, b)) -> Router (a :- (b :- r)) (o :- r)Source

For example:

 cons :: Router (a :- [a] :- r) ([a] :- r)
 cons = constr2 (:) $ \x -> do a:as <- x; return (a, as)

int :: Router r (Int :- r)Source

Routes any integer.

slash :: Router r rSource

Routes a slash.

lit :: String -> Router r rSource

Routes a constant string.