Safe Haskell | None |
---|---|
Language | Haskell2010 |
- growl :: MonadIO m => (forall a. m a -> IO a) -> HandlerT m () -> GrowlerT m () -> IO ()
- growler :: MonadIO m => (forall a. m a -> IO a) -> HandlerT m () -> GrowlerT m () -> IO Application
- type Growler = GrowlerT IO
- data GrowlerT m a
- get :: MonadIO m => RoutePattern -> HandlerT m () -> GrowlerT m ()
- post :: MonadIO m => RoutePattern -> HandlerT m () -> GrowlerT m ()
- put :: MonadIO m => RoutePattern -> HandlerT m () -> GrowlerT m ()
- delete :: MonadIO m => RoutePattern -> HandlerT m () -> GrowlerT m ()
- patch :: MonadIO m => RoutePattern -> HandlerT m () -> GrowlerT m ()
- matchAny :: MonadIO m => RoutePattern -> HandlerT m () -> GrowlerT m ()
- notFound :: MonadIO m => HandlerT m ()
- addRoute :: MonadIO m => StdMethod -> RoutePattern -> HandlerT m () -> GrowlerT m ()
- regex :: String -> RoutePattern
- capture :: String -> RoutePattern
- function :: (Request -> Text) -> (Request -> MatchResult) -> RoutePattern
- literal :: String -> RoutePattern
- mount :: Monad m => RoutePattern -> GrowlerT m () -> GrowlerT m ()
- handlerHook :: Monad m => (HandlerT m () -> HandlerT m ()) -> GrowlerT m ()
- type Handler = HandlerT IO
- data HandlerT m a
- currentResponse :: Monad m => HandlerT m ResponseState
- abort :: Monad m => ResponseState -> HandlerT m ()
- status :: Monad m => Status -> HandlerT m ()
- addHeader :: Monad m => CI ByteString -> ByteString -> HandlerT m ()
- setHeader :: Monad m => CI ByteString -> ByteString -> HandlerT m ()
- body :: Monad m => BodySource -> HandlerT m ()
- html :: Monad m => Text -> HandlerT m ()
- json :: Monad m => ToJSON a => a -> HandlerT m ()
- file :: Monad m => FilePath -> Maybe FilePart -> HandlerT m ()
- formData :: MonadIO m => BackEnd y -> HandlerT m ([(ByteString, ByteString)], [File y])
- headers :: Monad m => HandlerT m RequestHeaders
- jsonData :: (FromJSON a, MonadIO m) => HandlerT m (Either String a)
- params :: Monad m => HandlerT m [Param]
- raw :: Monad m => ByteString -> HandlerT m ()
- redirect :: Monad m => Text -> HandlerT m ()
- request :: Monad m => HandlerT m Request
- stream :: Monad m => StreamingBody -> HandlerT m ()
- text :: Monad m => Text -> HandlerT m ()
- routePattern :: Monad m => HandlerT m (Maybe Text)
- class Parsable a where
- parseParam :: ByteString -> Either ByteString a
- parseParamList :: ByteString -> Either ByteString [a]
- readEither :: Read a => ByteString -> Either ByteString a
- data BodySource
- = FileSource !(FilePath, Maybe FilePart)
- | BuilderSource !Builder
- | LBSSource !ByteString
- | StreamSource !StreamingBody
- | RawSource !(IO ByteString -> (ByteString -> IO ()) -> IO ()) !Response
- data ResponseState
- newtype RoutePattern = RoutePattern {
- runRoutePattern :: Request -> (Text, Request, MatchResult)
Running a growler app
growler :: MonadIO m => (forall a. m a -> IO a) -> HandlerT m () -> GrowlerT m () -> IO Application Source
Routing
delete :: MonadIO m => RoutePattern -> HandlerT m () -> GrowlerT m () Source
delete = addroute
DELETE
matchAny :: MonadIO m => RoutePattern -> HandlerT m () -> GrowlerT m () Source
Add a route that matches regardless of the HTTP verb.
notFound :: MonadIO m => HandlerT m () Source
Specify an action to take if nothing else is found. Note: this _always_ matches, so should generally be the last route specified.
addRoute :: MonadIO m => StdMethod -> RoutePattern -> HandlerT m () -> GrowlerT m () Source
Define a route with a StdMethod
, Text
value representing the path spec,
and a body (Action
) which modifies the response.
addroute GET "/" $ text "beam me up!"
The path spec can include values starting with a colon, which are interpreted
as captures. These are named wildcards that can be looked up with param
.
addroute GET "/foo/:bar" $ do v <- param "bar" text v
>>>
curl http://localhost:3000/foo/something
something
regex :: String -> RoutePattern Source
Match requests using a regular expression. Named captures are not yet supported.
get (regex "^/f(.*)r$") $ do path <- param "0" cap <- param "1" text $ mconcat ["Path: ", path, "\nCapture: ", cap]
>>>
curl http://localhost:3000/foo/bar
Path: /foo/bar Capture: oo/ba
capture :: String -> RoutePattern Source
Standard Sinatra-style route. Named captures are prepended with colons. This is the default route type generated by OverloadedString routes. i.e.
get (capture "/foo/:bar") $ ...
and
{-# LANGUAGE OverloadedStrings #-} ... get "/foo/:bar" $ ...
are equivalent.
function :: (Request -> Text) -> (Request -> MatchResult) -> RoutePattern Source
Build a route based on a function which can match using the entire Request
object.
Nothing
indicates the route does not match. A Just
value indicates
a successful match, optionally returning a list of key-value pairs accessible
by param
.
get (function $ \req -> Just [("version", T.pack $ show $ httpVersion req)]) $ do v <- param "version" text v
>>>
curl http://localhost:3000/
HTTP/1.1
literal :: String -> RoutePattern Source
Build a route that requires the requested path match exactly, without captures.
Handlers
MonadTrans HandlerT | |
MonadTransControl HandlerT | |
MonadBase b m => MonadBase b (HandlerT m) | |
MonadBaseControl b m => MonadBaseControl b (HandlerT m) | |
Monad m => Monad (HandlerT m) | |
Monad m => Functor (HandlerT m) | |
Monad m => Applicative (HandlerT m) | |
MonadIO m => MonadIO (HandlerT m) | |
data StT HandlerT = StHandlerT {
| |
data StM (HandlerT m) = StMHandlerT {
|
currentResponse :: Monad m => HandlerT m ResponseState Source
abort :: Monad m => ResponseState -> HandlerT m () Source
addHeader :: Monad m => CI ByteString -> ByteString -> HandlerT m () Source
setHeader :: Monad m => CI ByteString -> ByteString -> HandlerT m () Source
body :: Monad m => BodySource -> HandlerT m () Source
formData :: MonadIO m => BackEnd y -> HandlerT m ([(ByteString, ByteString)], [File y]) Source
headers :: Monad m => HandlerT m RequestHeaders Source
raw :: Monad m => ByteString -> HandlerT m () Source
stream :: Monad m => StreamingBody -> HandlerT m () Source
Parsable
Minimum implemention: parseParam
parseParam :: ByteString -> Either ByteString a Source
Take a ByteString
value and parse it as a
, or fail with a message.
parseParamList :: ByteString -> Either ByteString [a] Source
Default implementation parses comma-delimited lists.
parseParamList t = mapM parseParam (BS.split ',' t)
Parsable Bool | |
Parsable Char | Overrides default |
Parsable Double | |
Parsable Float | |
Parsable Int | |
Parsable Integer | |
Parsable () | Checks if parameter is present and is null-valued, not a literal '()'.
If the URI requested is: '/foo?bar=()&baz' then |
Parsable ByteString | |
Parsable Text | |
Parsable Text | |
Parsable a => Parsable [a] |
readEither :: Read a => ByteString -> Either ByteString a Source
Internals
data BodySource Source
FileSource !(FilePath, Maybe FilePart) | |
BuilderSource !Builder | |
LBSSource !ByteString | |
StreamSource !StreamingBody | |
RawSource !(IO ByteString -> (ByteString -> IO ()) -> IO ()) !Response |
data ResponseState Source
newtype RoutePattern Source
RoutePattern | |
|