- data Router a b
- data a :- b = a :- b
- (<>) :: Monoid m => m -> m -> m
- parse :: Router () a -> String -> [a]
- unparse :: Router () a -> a -> [String]
- parse1 :: Router () (a :- ()) -> String -> [a]
- unparse1 :: Router () (a :- ()) -> a -> [String]
- constr0 :: o -> (Maybe o -> Maybe ()) -> Router r (o :- r)
- constr1 :: (a -> o) -> (Maybe o -> Maybe a) -> Router (a :- r) (o :- r)
- constr2 :: (a -> b -> o) -> (Maybe o -> Maybe (a, b)) -> Router (a :- (b :- r)) (o :- r)
- int :: Router r (Int :- r)
- slash :: Router r r
- lit :: String -> Router r r
Types
Running routers
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