symantic-http-server-0.1.1.20190410: 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 handlers k Source #

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

Server is analogous to a scanf using the API as 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_Raw Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type RawConstraint Server :: Constraint #

type RawArgs Server :: Type #

type Raw Server :: Type #

HTTP_Path Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type PathConstraint Server a :: Constraint #

Methods

segment :: PathSegment -> Server k k #

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

captureAll :: Server ([PathSegment] -> 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 certain 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 #

HTTP_Routing Server Source # 
Instance details

Defined in Symantic.HTTP.Server

Cat (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

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

Alt (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

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

Trans (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type UnTrans (Router Server) :: Type -> Type -> Type #

Pro (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

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

HTTP_Raw (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type RawConstraint (Router Server) :: Constraint #

type RawArgs (Router Server) :: Type #

type Raw (Router Server) :: Type #

HTTP_Header (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

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

HTTP_Body (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type BodyArg (Router Server) a ts :: Type #

type BodyConstraint (Router Server) a ts :: Constraint #

Methods

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

HTTP_BodyStream (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type BodyStreamArg (Router Server) as ts framing :: Type #

type BodyStreamConstraint (Router Server) as ts framing :: Constraint #

Methods

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

HTTP_Query (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type QueryConstraint (Router Server) a :: Constraint #

HTTP_BasicAuth (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type BasicAuthConstraint (Router Server) a :: Constraint #

type BasicAuthArgs (Router Server) a k :: Type #

HTTP_Response (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type ResponseConstraint (Router Server) a ts :: Constraint #

type ResponseArgs (Router Server) a ts :: Type #

type Response (Router Server) :: Type #

HTTP_ResponseStream (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type ResponseStreamConstraint (Router Server) as ts framing :: Constraint #

type ResponseStreamArgs (Router Server) as ts framing :: Type #

type ResponseStream (Router Server) :: Type #

HTTP_Routing (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type Raw Server Source # 
Instance details

Defined in Symantic.HTTP.Server

type RawArgs Server Source # 
Instance details

Defined in Symantic.HTTP.Server

type RawConstraint Server Source # 
Instance details

Defined in Symantic.HTTP.Server

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

type UnTrans (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type Raw (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type RawArgs (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type RawConstraint (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type Response (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseStream (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type QueryConstraint (Router Server) a Source # 
Instance details

Defined in Symantic.HTTP.Server

type BasicAuthConstraint (Router Server) a Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyConstraint (Router Server) a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyArg (Router Server) a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type BasicAuthArgs (Router Server) a k Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseArgs (Router Server) a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseConstraint (Router Server) a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyStreamConstraint (Router Server) as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyStreamArg (Router Server) as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyStreamArg (Router Server) as ts framing = BodyStreamArg (UnTrans (Router Server)) as ts framing
type ResponseStreamArgs (Router Server) as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseStreamArgs (Router Server) as ts framing = ResponseStreamArgs (UnTrans (Router Server)) as ts framing
type ResponseStreamConstraint (Router Server) as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

server :: Router Server handlers (Response Server) -> handlers -> Application Source #

(server api handlers) returns an 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 :: [Type]) a Source #

Constructors

ServerBodyArg a 

Type ServerBodyStreamArg

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

Constructors

ServerBodyStreamArg as 

Type ServerRes

newtype ServerRes (ts :: [Type]) 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

newtype ServerResStream framing (ts :: [Type]) 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

Type Router

data Router repr a b where Source #

Transform a Server to merge Alternative segments into a routing.

Constructors

Router_Any :: repr a b -> Router repr a b

Lift any (repr) into Router, those not useful to segregate wrt. the Transformation performed, aka. noTrans.

Router_Seg :: PathSegment -> Router repr k k

Represent segment.

Router_Cat :: Router repr a b -> Router repr b c -> Router repr a c

Represent (<.>).

Router_Map :: Map PathSegment (Router repr a k) -> Router repr a k

Represent routing.

Router_Alt :: Router repr a k -> Router repr b k -> Router repr (a :!: b) k

Represent (<!>).

Router_Cap :: PathConstraint Server a => Name -> Router repr (a -> k) k

Represent capture'.

Router_Caps :: Captures (Router repr) cs k -> Router repr (AltFromBinTree cs) k

Represent captures.

Router_Union :: (b -> a) -> Router repr a k -> Router repr b k

Unify Routers which have different handlers. Useful to put alternative Routers in a Map as in Router_Map.

Instances
Cat (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

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

Alt (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

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

Trans (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type UnTrans (Router Server) :: Type -> Type -> Type #

Pro (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

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

HTTP_Raw (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type RawConstraint (Router Server) :: Constraint #

type RawArgs (Router Server) :: Type #

type Raw (Router Server) :: Type #

repr ~ Server => HTTP_Path (Router repr) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type PathConstraint (Router repr) a :: Constraint #

Methods

segment :: PathSegment -> Router repr k k #

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

captureAll :: Router repr ([PathSegment] -> k) k #

HTTP_Header (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Methods

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

HTTP_Body (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type BodyArg (Router Server) a ts :: Type #

type BodyConstraint (Router Server) a ts :: Constraint #

Methods

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

HTTP_BodyStream (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type BodyStreamArg (Router Server) as ts framing :: Type #

type BodyStreamConstraint (Router Server) as ts framing :: Constraint #

Methods

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

HTTP_Query (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type QueryConstraint (Router Server) a :: Constraint #

HTTP_BasicAuth (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type BasicAuthConstraint (Router Server) a :: Constraint #

type BasicAuthArgs (Router Server) a k :: Type #

HTTP_Response (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type ResponseConstraint (Router Server) a ts :: Constraint #

type ResponseArgs (Router Server) a ts :: Type #

type Response (Router Server) :: Type #

HTTP_ResponseStream (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

Associated Types

type ResponseStreamConstraint (Router Server) as ts framing :: Constraint #

type ResponseStreamArgs (Router Server) as ts framing :: Type #

type ResponseStream (Router Server) :: Type #

HTTP_Routing (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type UnTrans (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type Raw (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type RawArgs (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type RawConstraint (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type Response (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseStream (Router Server) Source # 
Instance details

Defined in Symantic.HTTP.Server

type PathConstraint (Router repr) a Source # 
Instance details

Defined in Symantic.HTTP.Server

type PathConstraint (Router repr) a = PathConstraint repr a
type QueryConstraint (Router Server) a Source # 
Instance details

Defined in Symantic.HTTP.Server

type BasicAuthConstraint (Router Server) a Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyConstraint (Router Server) a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyArg (Router Server) a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type BasicAuthArgs (Router Server) a k Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseArgs (Router Server) a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseConstraint (Router Server) a ts Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyStreamConstraint (Router Server) as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyStreamArg (Router Server) as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

type BodyStreamArg (Router Server) as ts framing = BodyStreamArg (UnTrans (Router Server)) as ts framing
type ResponseStreamArgs (Router Server) as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

type ResponseStreamArgs (Router Server) as ts framing = ResponseStreamArgs (UnTrans (Router Server)) as ts framing
type ResponseStreamConstraint (Router Server) as ts framing Source # 
Instance details

Defined in Symantic.HTTP.Server

Type Captures

data Captures repr (cs :: BinTree Type) k where Source #

Constructors

Captures0 :: PathConstraint Server a => Proxy a -> Name -> repr x k -> Captures repr (BinTree0 (a -> x)) k 
Captures2 :: Captures repr x k -> Captures repr y k -> Captures repr (BinTree2 x y) k 

Type BinTree

data BinTree a Source #

Use DataKinds to define a BinTree of Types. Useful for gathering together captures of different Types.

Constructors

BinTree0 a 
BinTree2 (BinTree a) (BinTree a) 

Type family AltFromBinTree

type family AltFromBinTree (cs :: BinTree Type) :: Type where ... Source #

Class HTTP_Routing

class HTTP_Routing repr where Source #

Minimal complete definition

Nothing

Methods

routing :: Map PathSegment (repr a k) -> repr a k Source #

captures :: Captures repr cs k -> repr (AltFromBinTree cs) k Source #

routing :: Trans repr => HTTP_Routing (UnTrans repr) => Map PathSegment (repr a k) -> repr a k Source #

captures :: Trans repr => HTTP_Routing (UnTrans repr) => Captures repr cs k -> repr (AltFromBinTree cs) k Source #

router :: Router repr a b -> Router repr a b Source #

Traverse a Router to transform it:

Used in server on the Router inferred from the given API.

router_Alt :: Router repr a k -> Router repr b k -> Router repr (a :!: b) k Source #

Merge/reorder alternatives if possible or default to a Router_Alt.

router_Map :: Map PathSegment (Router repr a k) -> Map PathSegment (Router repr b k) -> Router repr (a :!: b) k Source #

Orphan instances

Semigroup Status Source #

Return worse Status.

Instance details

Monoid Status Source #

Useful when Status is within a WriterT.

Instance details