Wheb-0.0.1.1: The Batteries-Included Haskell WAI Framework

Safe HaskellNone

Web.Wheb

Contents

Description

This module reexports Wheb modules. It should be the only thing you need to import to get started.

import           Web.Wheb
import           Data.Text.Lazy (pack)

main :: IO ()
main = do
  opts <- generateOptions $ addGET (pack ".") rootPat $ (text (pack "Hi!"))
  runWhebServer (opts :: MinOpts)

Synopsis

Handlers

ReaderT and StateT Functionality

ReaderT

getApp :: Monad m => WhebT g s m gSource

Get the g in WhebT g s m g. This is a read-only state so only thread-safe resources such as DB connections should go in here.

getWithApp :: Monad m => (g -> a) -> WhebT g s m aSource

StateT

getReqState :: Monad m => WhebT g s m sSource

Get the s in WhebT g s m g. This is a read and writable state so you can get and put information in your state. Each request gets its own fresh state generated from Default

putReqState :: Monad m => s -> WhebT g s m ()Source

modifyReqState :: Monad m => (s -> s) -> WhebT g s m sSource

modifyReqState' :: Monad m => (s -> s) -> WhebT g s m ()Source

Dealing with responses

Creating a HandlerResponse

html :: Monad m => Text -> WhebHandlerT g s mSource

Return simple HTML from Text

text :: Monad m => Text -> WhebHandlerT g s mSource

Return simple Text

file :: Monad m => Text -> Text -> WhebHandlerT g s mSource

Give filepath and content type to serve a file from disk.

Setting a header

setHeader :: Monad m => Text -> Text -> WhebT g s m ()Source

Set a header for the response

setRawHeader :: Monad m => Header -> WhebT g s m ()Source

Set a Strict ByteString header for the response

Settings

getSetting :: Monad m => Text -> WhebT g s m (Maybe Text)Source

Help prevent monomorphism errors for simple settings.

getSetting' :: (Monad m, Typeable a) => Text -> WhebT g s m (Maybe a)Source

Open up underlying support for polymorphic global settings

getSettings :: Monad m => WhebT g s m CSettingsSource

Get all settings.

Routes

getRouteParams :: Monad m => WhebT g s m RouteParamListSource

Get all route params.

getRouteParam :: (Typeable a, Monad m) => Text -> WhebT g s m (Maybe a)Source

Cast a route param into its type.

getRoute :: Monad m => Text -> RouteParamList -> WhebT g s m TextSource

Convert Either from getRoute' into an error in the Monad

getRoute' :: Monad m => Text -> RouteParamList -> WhebT g s m (Either UrlBuildError Text)Source

Generate a route from a name and param list.

Request reading

getRequest :: Monad m => WhebT g s m RequestSource

Access the request

getRequestHeader :: Monad m => Text -> WhebT g s m (Maybe Text)Source

Get a request header

getWithRequest :: Monad m => (Request -> a) -> WhebT g s m aSource

getQueryParams :: Monad m => WhebT g s m QuerySource

Get params from URL (e.g. from '/foo/?q=4')

getPOSTParam :: MonadIO m => Text -> WhebT g s m (Maybe Text)Source

Maybe get one param if it exists.

getPOSTParams :: MonadIO m => WhebT g s m [(Text, Text)]Source

Get POST params as Text

getRawPOST :: MonadIO m => WhebT g s m ([Param], [File ByteString])Source

Get the raw parsed POST data including files.

Running Wheb

runWhebServer :: Default s => WhebOptions g s IO -> IO ()Source

Convenience wrapper for runWhebServerT function in IO

runWhebServerT :: Default s => (m EResponse -> IO EResponse) -> WhebOptions g s m -> IO ()Source

Run a server with a function to run your inner Transformer to IO and generated options

debugHandler :: Default s => WhebOptions g s IO -> WhebT g s IO a -> IO (Either WhebError a)Source

Convenience wrapper for debugHandlerT function in IO

debugHandlerT :: Default s => WhebOptions g s m -> (m (Either WhebError a) -> IO (Either WhebError a)) -> Request -> WhebT g s m a -> IO (Either WhebError a)Source

Running a Handler with a custom Transformer

Initialize

Routes

Named routes convenience functions

addGET :: Text -> UrlPat -> WhebHandlerT g s m -> InitM g s m ()Source

addPOST :: Text -> UrlPat -> WhebHandlerT g s m -> InitM g s m ()Source

Add raw routes

addRoute :: Route g s m -> InitM g s m ()Source

addRoutes :: [Route g s m] -> InitM g s m ()Source

Middlewares

addWAIMiddleware :: Middleware -> InitM g s m ()Source

Add generic WAI middleware

addWhebMiddleware :: WhebMiddleware g s m -> InitM g s m ()Source

Add Wheb specific middleware

Settings

addSetting :: Text -> Text -> InitM g s m ()Source

Wrapped addSetting' to help prevent monomorphism errors for simple settings.

addSetting' :: Typeable a => Text -> a -> InitM g s m ()Source

Adds a setting value, replacing it if its key already exists.

Running

generateOptions :: MonadIO m => InitM g s m g -> IO (WhebOptions g s m)Source

Generate WhebOptions from InitM in IO

Routes

URL Patterns

rootPat :: UrlPatSource

Represents root path /

URL building

(</>) :: UrlPat -> UrlPat -> UrlPatSource

Allows for easier building of URL patterns This should be the primary URL constructor.

        ("blog" </> (grabInt "pk") </> "edit" </> (grabText "verb"))

grabInt :: Text -> UrlPatSource

Parses URL parameter and matches on Int

grabText :: Text -> UrlPatSource

Parses URL parameter and matches on Text

pT :: Text -> UrlPatSource

Constructors to use w/o OverloadedStrings

Types

class Default a where

A class for types with a default value.

Methods

def :: a

The default value for this type.