webby-0.1.0.2: A super-simple web server framework

Safe HaskellNone
LanguageHaskell2010

Webby

Contents

Synopsis

Documentation

data WebbyM appEnv a Source #

The main monad transformer stack used in the web-framework.

The type of a handler for a request is `WebbyM appEnv ()`. The appEnv parameter is used by the web application to store an (read-only) environment. For e.g. it can be used to store a database connection pool.

Instances
Monad (WebbyM appEnv) Source # 
Instance details

Defined in Webby.Types

Methods

(>>=) :: WebbyM appEnv a -> (a -> WebbyM appEnv b) -> WebbyM appEnv b #

(>>) :: WebbyM appEnv a -> WebbyM appEnv b -> WebbyM appEnv b #

return :: a -> WebbyM appEnv a #

fail :: String -> WebbyM appEnv a #

Functor (WebbyM appEnv) Source # 
Instance details

Defined in Webby.Types

Methods

fmap :: (a -> b) -> WebbyM appEnv a -> WebbyM appEnv b #

(<$) :: a -> WebbyM appEnv b -> WebbyM appEnv a #

Applicative (WebbyM appEnv) Source # 
Instance details

Defined in Webby.Types

Methods

pure :: a -> WebbyM appEnv a #

(<*>) :: WebbyM appEnv (a -> b) -> WebbyM appEnv a -> WebbyM appEnv b #

liftA2 :: (a -> b -> c) -> WebbyM appEnv a -> WebbyM appEnv b -> WebbyM appEnv c #

(*>) :: WebbyM appEnv a -> WebbyM appEnv b -> WebbyM appEnv b #

(<*) :: WebbyM appEnv a -> WebbyM appEnv b -> WebbyM appEnv a #

MonadIO (WebbyM appEnv) Source # 
Instance details

Defined in Webby.Types

Methods

liftIO :: IO a -> WebbyM appEnv a #

MonadUnliftIO (WebbyM appData) Source # 
Instance details

Defined in Webby.Types

Methods

askUnliftIO :: WebbyM appData (UnliftIO (WebbyM appData)) #

withRunInIO :: ((forall a. WebbyM appData a -> IO a) -> IO b) -> WebbyM appData b #

MonadLogger (WebbyM env) Source # 
Instance details

Defined in Webby.Types

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> WebbyM env () #

MonadReader (WEnv appEnv) (WebbyM appEnv) Source # 
Instance details

Defined in Webby.Types

Methods

ask :: WebbyM appEnv (WEnv appEnv) #

local :: (WEnv appEnv -> WEnv appEnv) -> WebbyM appEnv a -> WebbyM appEnv a #

reader :: (WEnv appEnv -> a) -> WebbyM appEnv a #

Routing and handler functions

data RoutePattern Source #

Instances
Eq RoutePattern Source # 
Instance details

Defined in Webby.Types

Show RoutePattern Source # 
Instance details

Defined in Webby.Types

type Routes appEnv = [(RoutePattern, WebbyM appEnv ())] Source #

The Routes of a web-application are a list of mappings from a RoutePattern to a handler function.

mkRoute :: Method -> Text -> WebbyM appEnv () -> (RoutePattern, WebbyM appEnv ()) Source #

Create a route for a user-provided HTTP request method, pattern and handler function.

post :: Text -> WebbyM appEnv () -> (RoutePattern, WebbyM appEnv ()) Source #

Create a route for a POST request method, given the path pattern and handler.

get :: Text -> WebbyM appEnv () -> (RoutePattern, WebbyM appEnv ()) Source #

Create a route for a GET request method, given the path pattern and handler.

put :: Text -> WebbyM appEnv () -> (RoutePattern, WebbyM appEnv ()) Source #

Create a route for a PUT request method, given the path pattern and handler.

Captures

type Captures = HashMap Text Text Source #

Captures are simply extracted path elements in a HashMap

captures :: WebbyM appEnv Captures Source #

Retrieve all path captures

getCapture :: FromHttpApiData a => Text -> WebbyM appEnv a Source #

Retrieve a particular capture (TODO: extend?)

Request parsing

flag :: Text -> WebbyM appEnv Bool Source #

jsonData :: FromJSON a => WebbyM appEnv a Source #

param :: FromHttpApiData a => Text -> WebbyM appEnv (Maybe a) Source #

params :: WebbyM appEnv [(Text, Text)] Source #

Response modification

setStatus :: Status -> WebbyM appEnv () Source #

addHeader :: Header -> WebbyM appEnv () Source #

setHeader :: Header -> WebbyM appEnv () Source #

blob :: ByteString -> WebbyM appEnv () Source #

json :: ToJSON b => b -> WebbyM appEnv () Source #

text :: Text -> WebbyM appEnv () Source #

Application

mkWebbyApp :: appEnv -> Routes appEnv -> IO Application Source #

Use this function, to create a WAI application. It takes a user/application defined appEnv data type and a list of routes. If none of the requests match a request, a default 404 response is returned.

Application context

data WEnv appEnv Source #

The reader environment used by the web framework. It is parameterized by the application's environment data type.

Instances
MonadReader (WEnv appEnv) (WebbyM appEnv) Source # 
Instance details

Defined in Webby.Types

Methods

ask :: WebbyM appEnv (WEnv appEnv) #

local :: (WEnv appEnv -> WEnv appEnv) -> WebbyM appEnv a -> WebbyM appEnv a #

reader :: (WEnv appEnv -> a) -> WebbyM appEnv a #

getAppEnv :: WebbyM appEnv appEnv Source #

Retrieve the app environment given to the application at initialization.

runAppEnv :: ReaderT appEnv (WebbyM appEnv) a -> WebbyM appEnv a Source #

Handler flow control

finish :: WebbyM appEnv a Source #

Exceptions thrown

data WebbyError Source #

Various kinds of errors thrown by this library - these can be caught by handler code.