symantic-http-server-0.0.0.20190324: symantic-http applied to the derivation of HTTP servers

Safe HaskellNone
LanguageHaskell2010

Symantic.HTTP.Server

Contents

Description

See symantic-http-demo for an example of how to use this module.

Synopsis

Type Server

newtype Server responses k Source #

Server responses k is a recipe to produce an Application from arguments responses (one per number of alternative routes), separated by (:!:).

Server is analogous to a scanf using a format customized for HTTP routing.

The multiple ServerCheckT monad transformers are there to prioritize the errors according to the type of check raising them, instead of the order of the combinators within an actual API specification.

Instances
Cat Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

(<.>) :: Server a b -> Server b c -> Server a c #

Alt Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

(<!>) :: Server a k -> Server b k -> Server (a :!: b) k #

Pro Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

dimap :: (a -> b) -> (b -> a) -> Server (a -> k) k -> Server (b -> k) k #

HTTP_Path Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type PathConstraint Server a :: Constraint #

Methods

segment :: Segment -> Server k k #

capture' :: PathConstraint Server a => Name -> Server (a -> k) k #

captureAll :: Server ([Segment] -> k) k #

HTTP_Header Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

header :: HeaderName -> Server (HeaderValue -> k) k #

HTTP_Body Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type BodyArg Server a ts :: Type #

type BodyConstraint Server a ts :: Constraint #

Methods

body' :: BodyConstraint Server a ts => Server (BodyArg Server a ts -> k) k #

HTTP_BodyStream Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type BodyStreamArg Server as ts framing :: Type #

type BodyStreamConstraint Server as ts framing :: Constraint #

Methods

bodyStream' :: BodyStreamConstraint Server as ts framing => Server (BodyStreamArg Server as ts framing -> k) k #

HTTP_Query Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type QueryConstraint Server a :: Constraint #

HTTP_BasicAuth Server Source #

WARNING: current implementation of Basic Access Authentication is not immune to certian kinds of timing attacks. Decoding payloads does not take a fixed amount of time.

Instance details

Defined in Symantic.HTTP.Server

Associated Types

type BasicAuthConstraint Server a :: Constraint #

type BasicAuthArgs Server a k :: Type #

HTTP_Version Server Source #

TODO: add its own error?

Instance details

Defined in Symantic.HTTP.Server

Methods

version :: HttpVersion -> Server k k #

HTTP_Response Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type ResponseConstraint Server a ts :: Constraint #

type ResponseArgs Server a ts :: Type #

type Response Server :: Type #

HTTP_ResponseStream Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type ResponseStreamConstraint Server as ts framing :: Constraint #

type ResponseStreamArgs Server as ts framing :: Type #

type ResponseStream Server :: Type #

Functor (Server responses) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

fmap :: (a -> b) -> Server responses a -> Server responses b #

(<$) :: a -> Server responses b -> Server responses a #

type Response Server Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseStream Server Source # 
Instance details

Defined in Symantic.HTTP.Server

type PathConstraint Server a Source # 
Instance details

Defined in Symantic.HTTP.Server

type QueryConstraint Server a Source # 
Instance details

Defined in Symantic.HTTP.Server

type BasicAuthConstraint Server a Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyConstraint Server a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyArg Server a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyArg Server a ts = ServerBodyArg ts a
type BasicAuthArgs Server a k Source # 
Instance details

Defined in Symantic.HTTP.Server

type BasicAuthArgs Server a k = a -> k
type ResponseArgs Server a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseConstraint Server a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyStreamConstraint Server as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyStreamArg Server as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyStreamArg Server as ts framing = ServerBodyStreamArg as ts framing
type ResponseStreamArgs Server as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseStreamArgs Server as ts framing = ServerResponseStream framing ts IO as
type ResponseStreamConstraint Server as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

server :: Server responses (Response Server) -> responses -> Application Source #

server api responses returns a Application ready to be given to Warp.run 80.

runServerChecks :: StateT ServerState (ExceptT e1 (ExceptT e2 (ExceptT e3 (ExceptT e4 (ExceptT e5 (ExceptT e6 (ExceptT e7 (ExceptT e8 IO)))))))) a -> ServerState -> IO (Either e8 (Either e7 (Either e6 (Either e5 (Either e4 (Either e3 (Either e2 (Either e1 (a, ServerState))))))))) Source #

Unwrap the ExceptT constructors to reach the Either constructors.

Type ServerCheckT

Type RouteResult

Type Fail

data Fail e Source #

Constructors

Fail ServerState e

Keep trying other paths. 404, 405 or 406.

FailFatal !ServerState !e

Don't try other paths.

Instances
Show e => Show (Fail e) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

showsPrec :: Int -> Fail e -> ShowS #

show :: Fail e -> String #

showList :: [Fail e] -> ShowS #

Semigroup e => Semigroup (Fail e) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

(<>) :: Fail e -> Fail e -> Fail e #

sconcat :: NonEmpty (Fail e) -> Fail e #

stimes :: Integral b => b -> Fail e -> Fail e #

Type ServerState

newtype ServerState Source #

Constructors

ServerState 
Instances
Show ServerState Source # 
Instance details

Defined in Symantic.HTTP.Server

Type ServerErrorPath

Type ServerErrorMethod

Type ServerErrorAccept

Type ServerErrorContentType

Type ServerErrorQuery

Type ServerErrorHeader

Type ServerErrorBasicAuth

Class ServerBasicAuth

Type ServerErrorBody

Type ServerBodyArg

newtype ServerBodyArg (ts :: [*]) a Source #

Constructors

ServerBodyArg a 

Type ServerBodyStreamArg

newtype ServerBodyStreamArg as (ts :: [*]) framing Source #

Constructors

ServerBodyStreamArg as 

Type ServerRes

newtype ServerRes (ts :: [*]) m a Source #

A continuation for |server|'s users to respond.

This newtype has two uses : * Carrying the ts type variable to server. * Providing a return for the simple response case of status200 and no extra headers.

Constructors

ServerResponse 

Fields

Instances
MonadTrans (ServerRes ts) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

lift :: Monad m => m a -> ServerRes ts m a #

Monad m => Monad (ServerRes ts m) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

(>>=) :: ServerRes ts m a -> (a -> ServerRes ts m b) -> ServerRes ts m b #

(>>) :: ServerRes ts m a -> ServerRes ts m b -> ServerRes ts m b #

return :: a -> ServerRes ts m a #

fail :: String -> ServerRes ts m a #

Functor m => Functor (ServerRes ts m) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

fmap :: (a -> b) -> ServerRes ts m a -> ServerRes ts m b #

(<$) :: a -> ServerRes ts m b -> ServerRes ts m a #

Applicative m => Applicative (ServerRes ts m) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

pure :: a -> ServerRes ts m a #

(<*>) :: ServerRes ts m (a -> b) -> ServerRes ts m a -> ServerRes ts m b #

liftA2 :: (a -> b -> c) -> ServerRes ts m a -> ServerRes ts m b -> ServerRes ts m c #

(*>) :: ServerRes ts m a -> ServerRes ts m b -> ServerRes ts m b #

(<*) :: ServerRes ts m a -> ServerRes ts m b -> ServerRes ts m a #

type CanDo (ServerResponse ts m) (eff :: Type) Source #

All supported effects are handled by nested Monads.

Instance details

Defined in Symantic.HTTP.Server

type CanDo (ServerResponse ts m) (eff :: Type) = False

Type ServerResStream

Carrying the framing type variable to server.

Carrying the ts type variable to server.

Providing a return for the simple response case

newtype ServerResStream framing (ts :: [*]) m as Source #

Constructors

ServerResponseStream 

Fields

Instances
MonadTrans (ServerResStream framing ts) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

lift :: Monad m => m a -> ServerResStream framing ts m a #

Monad m => Monad (ServerResStream framing ts m) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

(>>=) :: ServerResStream framing ts m a -> (a -> ServerResStream framing ts m b) -> ServerResStream framing ts m b #

(>>) :: ServerResStream framing ts m a -> ServerResStream framing ts m b -> ServerResStream framing ts m b #

return :: a -> ServerResStream framing ts m a #

fail :: String -> ServerResStream framing ts m a #

Functor m => Functor (ServerResStream framing ts m) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

fmap :: (a -> b) -> ServerResStream framing ts m a -> ServerResStream framing ts m b #

(<$) :: a -> ServerResStream framing ts m b -> ServerResStream framing ts m a #

Applicative m => Applicative (ServerResStream framing ts m) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

pure :: a -> ServerResStream framing ts m a #

(<*>) :: ServerResStream framing ts m (a -> b) -> ServerResStream framing ts m a -> ServerResStream framing ts m b #

liftA2 :: (a -> b -> c) -> ServerResStream framing ts m a -> ServerResStream framing ts m b -> ServerResStream framing ts m c #

(*>) :: ServerResStream framing ts m a -> ServerResStream framing ts m b -> ServerResStream framing ts m b #

(<*) :: ServerResStream framing ts m a -> ServerResStream framing ts m b -> ServerResStream framing ts m a #

type CanDo (ServerResponseStream framing ts m) (eff :: Type) Source #

All supported effects are handled by nested Monads.

Instance details

Defined in Symantic.HTTP.Server

type CanDo (ServerResponseStream framing ts m) (eff :: Type) = False

Orphan instances

Semigroup Status Source #

Return worse Status.

Instance details

Monoid Status Source #

Useful when Status is within a WriterT.

Instance details