| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Network.Routing
Description
>>>:set -XDataKinds -XOverloadedStrings -XNoMonomorphismRestriction>>>import Data.Proxy (Proxy(..))>>>import Text.Read(readMaybe)>>>import qualified Data.Text as T
- create path
>>>data Result = A | B T.Text | C | D Int deriving Show>>>let a = root $ exact "foo" $ action Nothing (\_ -> Just A)>>>let b = root $ exact "bar" $ fetch (Proxy :: Proxy "key") Just $ action Nothing (\d -> Just . B $ D.get (Proxy :: Proxy "key") d)>>>let c = root $ exact "bar" $ any $ action (Just "GET") (\_ -> Just C)>>>let d = root $ exact "bar" $ fetch (Proxy :: Proxy "key") (\t -> readMaybe (T.unpack t) :: Maybe Int) $ action Nothing (\d -> Just . D $ D.get (Proxy :: Proxy "key") d)>>>a* /foo>>>b* /bar/:key>>>cGET /bar/**>>>d* /bar/:key
- create router
>>>let r = d +| a +| b +| c +| empty
- execute router
>>>let run = execute r
>>>run "GET" ["foo"]Just A>>>run "GET" ["foo", "bar"]Nothing>>>run "GET" ["bar", "12"]Just (D 12)>>>run "GET" ["bar", "baz"]Just (B "baz")>>>run "GET" ["bar", "baz", "qux"]Just C>>>run "POST" ["bar", "baz", "qux"]Nothing
- type Method = ByteString
- data Path d m a
- root :: Path [] m a -> Path [] m a
- exact :: Text -> Path d m a -> Path d m a
- action :: Maybe Method -> (Dict d -> m a) -> Path d m a
- type Raw m d d' = Dict d -> [Text] -> m (Dict d', [Text])
- raw :: String -> Raw m d d' -> Path d' m a -> Path d m a
- fetch :: (MonadPlus m, KnownSymbol k, k </ d) => proxy k -> (Text -> Maybe v) -> Path ((k := v) : d) m a -> Path d m a
- any :: Monad m => Path d m a -> Path d m a
- rest :: (KnownSymbol k, Monad m, k </ d) => proxy k -> Path ((k := [Text]) : d) m a -> Path d m a
- data Router d m a
- empty :: MonadPlus m => Router [] m a
- add :: MonadPlus m => Path [] m a -> Router [] m a -> Router [] m a
- (+|) :: MonadPlus m => Path [] m a -> Router [] m a -> Router [] m a
- execute :: MonadPlus m => Router [] m a -> Method -> [Text] -> m a
Documentation
type Method = ByteString Source
Path
Path constructors
children
action
Arguments
| :: Maybe Method | if Nothing, any method allowed |
| -> (Dict d -> m a) | action when route matching |
| -> Path d m a |
action
get parameter
get one directory as parameter.
raw get parameter function
if you want matching exact path, use exact for performance
Arguments
| :: (KnownSymbol k, Monad m, k </ d) | |
| => proxy k | dictionary key |
| -> Path ((k := [Text]) : d) m a | |
| -> Path d m a |
take any pathes as [Text]
Router
add :: MonadPlus m => Path [] m a -> Router [] m a -> Router [] m a infixr 9 Source
insert path to router
(+|) :: MonadPlus m => Path [] m a -> Router [] m a -> Router [] m a infixr 9 Source
infix version of add