-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Webmachine inspired toolkit for building http applications and services. -- -- Webmachine inspired toolkit for building http applications and -- services. @package webcrank @version 0.2 module Webcrank.ServerAPI.WebcrankT -- | Monad transformer that can be used by server API providers. Provides -- tracking of the request state and logging of the decisions made so -- far. For example -- --
-- type WaiCrank m a = ReaderT (Request, HTTPDate) (WebcrankT m) a --newtype WebcrankT m a WebcrankT :: RWST (ResourceData (WebcrankT m)) LogData ReqData m a -> WebcrankT m a unWebcrankT :: WebcrankT m a -> RWST (ResourceData (WebcrankT m)) LogData ReqData m a runWebcrankT :: WebcrankT m a -> ServerAPI (WebcrankT m) -> Resource (WebcrankT m) -> ReqData -> m (a, ReqData, LogData) instance Functor m => Functor (WebcrankT m) instance (Monad m, Functor m) => Applicative (WebcrankT m) instance Monad m => Monad (WebcrankT m) instance MonadIO m => MonadIO (WebcrankT m) instance Monad m => MonadReader (ResourceData (WebcrankT m)) (WebcrankT m) instance Monad m => MonadState ReqData (WebcrankT m) instance Monad m => MonadWriter LogData (WebcrankT m) instance MonadThrow m => MonadThrow (WebcrankT m) instance MonadCatch m => MonadCatch (WebcrankT m) instance MonadMask m => MonadMask (WebcrankT m) instance MonadTrans WebcrankT module Webcrank.Internal.DecisionCore data FlowChart m a Decision :: String -> m (FlowChart m a) -> FlowChart m a Done :: m a -> FlowChart m a decision :: String -> m (FlowChart m a) -> FlowChart m a decision' :: Functor m => String -> m Bool -> FlowChart m a -> FlowChart m a -> FlowChart m a done :: m a -> FlowChart m a done' :: (Applicative m, Monad m) => a -> FlowChart m a runFlowChart :: Monad m => FlowChart m a -> m a respond :: Monad m => Status -> FlowChart (HaltT m) Status errorResponse :: Monad m => Status -> ByteString -> HaltT m a errorResponse' :: Monad m => Status -> HaltT m a b13 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b12 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b11 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b10 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b9 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b8 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b7 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b6 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b5 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b4 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status b3 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status c3 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status c4 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status d4 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status d5 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status e5 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status e6 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status setCharsetFrom :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> HaltT m () f6 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status f7 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status chooseEncoding :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> HaltT m () g7 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status getVariances :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => HaltT m [HeaderName] g8 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status g9 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status g11 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status h7 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status h10 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status h11 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status h12 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => HTTPDate -> FlowChart (HaltT m) Status i4 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status movedPermanentlyOr :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status -> HaltT m (FlowChart (HaltT m) Status) i7 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status i12 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status i13 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status j18 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status k5 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status k7 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status k13 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status l5 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status l7 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status l13 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status l14 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => ByteString -> FlowChart (HaltT m) Status l15 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => HTTPDate -> FlowChart (HaltT m) Status l17 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => HTTPDate -> FlowChart (HaltT m) Status m5 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status m7 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status m16 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status m20 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status n5 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status n11 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status appendPath :: ByteString -> [Text] -> ByteString splitURI :: ByteString -> (ByteString, ByteString) n16 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status o14 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status isConflict' :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => HaltT m (FlowChart (HaltT m) Status) o16 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status o18 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status o20 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status p3 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status p11 :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => FlowChart (HaltT m) Status accept :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => HaltT m () bool :: a -> a -> Bool -> a (<%%=) :: MonadState s m => Lens' s a -> (a -> m a) -> m () encodeBodyIfSet :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => HaltT m () encodeBody :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => Body -> HaltT m Body encodeBody' :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s) => Body -> m Body module Webcrank.Internal.Halt runHaltT :: HaltT m a -> m (Either Halt a) -- | Immediately end processing of the request, returning the response -- Status. It is the responsibility of the resource to ensure -- that all necessary response header and body elements have been added -- in order to make that response code valid. halt :: Monad m => Status -> HaltT m a -- | Immediately end processing of this request, returning a 500 -- Internal Server Error response. The response body will contain -- the reason. werror :: Monad m => ByteString -> HaltT m a -- | Immediately end processing of this request, returning a response with -- the given Status. The response body will contain the reason. werrorWith :: Monad m => Status -> ByteString -> HaltT m a module Webcrank.ServerAPI -- | A dictionary of functions that Webcrank needs in order to make -- decisions. data ServerAPI m ServerAPI :: m Method -> m ByteString -> (HeaderName -> m (Maybe ByteString)) -> m HTTPDate -> ServerAPI m -- | Get the request method of the current request. srvGetRequestMethod :: ServerAPI m -> m Method -- | The full URI of the request. srvGetRequestURI :: ServerAPI m -> m ByteString -- | Get the request header of the current request. srvGetRequestHeader :: ServerAPI m -> HeaderName -> m (Maybe ByteString) -- | Get the time the request was received. srvGetRequestTime :: ServerAPI m -> m HTTPDate -- | Container used to keep track of the decision state and what is known -- about response while processing a request. data ReqData -- | Smart constructor for creating a ReqData value with initial -- values. newReqData :: ReqData class HasReqData c_apkg where reqDataDispPath = (.) reqData reqDataDispPath reqDataRespBody = (.) reqData reqDataRespBody reqDataRespCharset = (.) reqData reqDataRespCharset reqDataRespEncoding = (.) reqData reqDataRespEncoding reqDataRespHeaders = (.) reqData reqDataRespHeaders reqDataRespMediaType = (.) reqData reqDataRespMediaType reqData :: HasReqData c_apkg => Lens' c_apkg ReqData -- | A wrapper for the ServerAPI and -- Resource that should be used to process requests to a -- path. data ResourceData m newResourceData :: ServerAPI m -> Resource m -> ResourceData m class HasResourceData c_apgn m_amfw | c_apgn -> m_amfw where resourceDataResource = (.) resourceData resourceDataResource resourceDataServerAPI = (.) resourceData resourceDataServerAPI resourceData :: HasResourceData c_apgn m_amfw => Lens' c_apgn (ResourceData m_amfw) data LogData -- | Process a request according to the webmachine state diagram. Intended -- for use by server API providers. run is a function which can -- run process to completion. -- -- WebcrankT is provided as a starting point. For the -- type -- --
-- type WaiCrank = ReaderT (Request, HTTPDate) (WebcrankT IO) ---- -- an appropriate run function would be -- --
-- run :: Resource WaiCrank -> Request -> HTTPDate -> WaiCrank a -> IO (a, ReqData, LogData) -- run resource req date wa = runReaderT (runWebcrankT wa (ResourceData api resource) newReqData) (req, date) --handleRequest :: (Applicative m, MonadReader r m, HasResourceData r m, MonadState s m, HasReqData s, MonadCatch m, Functor n) => (forall a. m a -> n (a, ReqData, LogData)) -> n (Status, HeadersMap, Maybe Body) module Webcrank.Internal module Webcrank -- | A Resource is a dictionary of functions which are used in the -- Webcrank decision process to determine how requests should be handled. -- -- Each function has a type of either m a or HaltT m -- a. A resource function which yields a HaltT m a value -- allows the function to terminate the request processing early using -- halt or werror. -- -- The defaults documented are used by the resource -- smart constructor. A resource that responds to GET requests -- with an HTML response would be written as -- --
-- myResource = resource { contentTypesProvided = return $ [("text/html", return "Hello world!")] }
--
--
-- responseWithBody and
-- responseWithHtml are additional smart constructors
-- useful creating resources.
data Resource m
Resource :: HaltT m Bool -> HaltT m Bool -> m [Method] -> HaltT m Bool -> HaltT m Authorized -> HaltT m Bool -> HaltT m Bool -> HaltT m Bool -> HaltT m Bool -> m ResponseHeaders -> m [(MediaType, HaltT m Body)] -> m CharsetsProvided -> m [(Encoding, Body -> Body)] -> HaltT m Bool -> MaybeT m ETag -> MaybeT m HTTPDate -> MaybeT m HTTPDate -> MaybeT (HaltT m) ByteString -> MaybeT (HaltT m) ByteString -> HaltT m Bool -> HaltT m Bool -> HaltT m Bool -> HaltT m Bool -> m (PostAction m) -> m [(MediaType, HaltT m ())] -> m [HeaderName] -> HaltT m Bool -> m Bool -> m () -> Resource m
-- | False will result in 503 Service Unavailable.
-- Defaults to True.
serviceAvailable :: Resource m -> HaltT m Bool
-- | True will result in 414 Request Too Long. Defaults
-- to False.
uriTooLong :: Resource m -> HaltT m Bool
-- | If a Method not in this list is requested, then a 405
-- Method Not Allowed will be sent. Defaults to [GET,
-- HEAD].
allowedMethods :: Resource m -> m [Method]
-- | True will result in 400 Bad Request. Defaults to
-- False.
malformedRequest :: Resource m -> HaltT m Bool
-- | If Authorized, the response will be 401
-- Unauthorized. Unauthorized will be used as the challenge
-- in the WWW-Authenticate header, e.g. Basic
-- realm=Webcrank. Defaults to Authorized.
isAuthorized :: Resource m -> HaltT m Authorized
-- | True will result in 403 Forbidden. Defaults to
-- False.
forbidden :: Resource m -> HaltT m Bool
-- | False will result in 501 Not Implemented. Defaults
-- to True.
validContentHeaders :: Resource m -> HaltT m Bool
-- | False will result in 415 Unsupported Media Type.
-- Defaults to True.
knownContentType :: Resource m -> HaltT m Bool
-- | False will result in 413 Request Entity Too Large.
-- Defaults to True.
validEntityLength :: Resource m -> HaltT m Bool
-- | If the OPTIONS method is supported and is used, the headers that
-- should appear in the response. Defaults to [].
options :: Resource m -> m ResponseHeaders
-- | Content negotiation is driven by this function. For example, if a
-- client request includes an Accept header with a value that
-- does not appear as a MediaType in any of the tuples, then a
-- 406 Not Acceptable will be sent. If there is a matching
-- MediaType, that function is used to create the entity when a
-- response should include one. Defaults to [].
contentTypesProvided :: Resource m -> m [(MediaType, HaltT m Body)]
-- | Used on GET requests to ensure that the entity is in Charset.
-- Defaults to NoCharset.
charsetsProvided :: Resource m -> m CharsetsProvided
-- | Used on GET requests to ensure that the body is encoded. One useful
-- setting is to have the function check on method, and on GET requests
-- return [("identity", id), ("gzip", compress)] as this is all
-- that is needed to support gzip content encoding. Defaults to
-- [].
encodingsProvided :: Resource m -> m [(Encoding, Body -> Body)]
-- | False will result in 404 Not Found. Defaults to
-- True.
resourceExists :: Resource m -> HaltT m Bool
-- | If this returns an ETag, it will be used for the ETag header
-- and for comparison in conditional requests. Defaults to
-- mzero.
generateETag :: Resource m -> MaybeT m ETag
-- | If this returns a HTTPDate, it will be used for the
-- Last-Modified header and for comparison in conditional requests.
-- Defaults to mzero.
lastModified :: Resource m -> MaybeT m HTTPDate
-- | If this returns a HTTPDate, it will be used for the Expires
-- header. Defaults to mzero.
expires :: Resource m -> MaybeT m HTTPDate
-- | If this returns a URI, the client will receive a 301 Moved Permanently
-- with the URI in the Location header. Defaults to mzero.
movedPermanently :: Resource m -> MaybeT (HaltT m) ByteString
-- | If this returns a URI, the client will receive a 307 Temporary
-- Redirect with URI in the Location header. Defaults to mzero.
movedTemporarily :: Resource m -> MaybeT (HaltT m) ByteString
-- | If this returns True, the movedPermanently and
-- movedTemporarily callbacks will be invoked to determine
-- whether the response should be 301 Moved Permanently, 307 Temporary
-- Redirect, or 410 Gone. Defaults to False.
previouslyExisted :: Resource m -> HaltT m Bool
-- | If the resource accepts POST requests to nonexistent resources, then
-- this should return True. Defaults to False.
allowMissingPost :: Resource m -> HaltT m Bool
-- | This is called when a DELETE request should be enacted, and should
-- return True if the deletion succeeded or has been accepted.
-- Defaults to True.
deleteResource :: Resource m -> HaltT m Bool
-- | This is only called after a successful deleteResource call,
-- and should return False if the deletion was accepted but
-- cannot yet be guaranteed to have finished. Defaults to True.
deleteCompleted :: Resource m -> HaltT m Bool
-- | If POST requests should be treated as a request to put content into a
-- (potentially new) resource as opposed to being a generic submission
-- for processing, then this function should return PostCreate
-- path. If it does return PostCreate path, then the rest
-- of the request will be treated much like a PUT to the path entry.
-- Otherwise, if it returns PostProcess a, then the action
-- a will be run. Defaults to PostProcess $ return ().
postAction :: Resource m -> m (PostAction m)
-- | This is used similarly to contentTypesProvided, except that
-- it is for incoming resource representations -- for example,
-- PUT requests. Handler functions usually want to use server
-- specific functions to access the incoming request body. Defaults to
-- [].
contentTypesAccepted :: Resource m -> m [(MediaType, HaltT m ())]
-- | This function should return a list of strings with header names that
-- should be included in a given response's Vary header. The standard
-- conneg headers (Accept, Accept-Encoding, Accept-Charset,
-- Accept-Language) do not need to be specified here as Webcrank will add
-- the correct elements of those automatically depending on resource
-- behavior. Defaults to [].
variances :: Resource m -> m [HeaderName]
-- | If this returns True, then it is assumed that multiple
-- representations of the response are possible and a single one cannot
-- be automatically chosen, so a 300 Multiple Choices will be
-- sent instead of a 200 OK. Defaults to False.
multipleChoices :: Resource m -> HaltT m Bool
-- | If this returns True, the client will receive a 409 Conflict.
-- Defaults to False.
isConflict :: Resource m -> m Bool
-- | Called just before the final response is constructed and sent.
finishRequest :: Resource m -> m ()
-- | Builds a Resource m value where all the resource functions
-- will return default values as described in the
-- Resource function documentation.
resource :: Monad m => Resource m
-- | Creates a resource that provides a single content type.
resourceWithBody :: Monad m => MediaType -> m Body -> Resource m
-- | Creates a resource that provides a text/html content type.
resourceWithHtml :: Monad m => m Body -> Resource m
-- | Content coding type, e.g. gzip, decompress. See
-- encodingsProvided.
type Encoding = CI ByteString
-- | Indicates whether client is authorized to perform the requested
-- operation on the resource. See isAuthorized.
data Authorized
-- | Tells Webcrank that the client is authorized to perform the requested
-- operation on the resource.
Authorized :: Authorized
-- | Tells Webcrank that the client is not authorized to perform the
-- operation on the resource. The value is sent in the
-- WWW-Authenticate header of the response, e.g. Basic
-- realm=Webcrank.
Unauthorized :: ByteString -> Authorized
-- | Weak or strong entity tags as used in HTTP ETag and
-- If-*-Match headers.
data ETag
StrongETag :: ByteString -> ETag
WeakETag :: ByteString -> ETag
-- | How POST requests should be treated. See
-- postAction.
data PostAction m
-- | Treat POSTs as creating new resources and respond with
-- 201 Created, with the given path in the Location header.
PostCreate :: [Text] -> PostAction m
-- | Treat POSTs as creating new resources and respond with
-- 301 See Other, redirecting the client to the new resource.
PostCreateRedir :: [Text] -> PostAction m
-- | Treat POSTs as a process which is executed without redirect.
PostProcess :: (HaltT m ()) -> PostAction m
-- | Treat POSTs as a process and redirect the client to a
-- different (possibly new) resource.
PostProcessRedir :: (HaltT m ByteString) -> PostAction m
-- | Create a PostAction which performs resource creation without
-- redirecting.
postCreate :: Monad m => [Text] -> m (PostAction m)
-- | Create a PostAction which performs resource creation and
-- redirects.
postCreateRedir :: Monad m => [Text] -> m (PostAction m)
-- | Create a PostAction which runs some process and does not
-- redirect.
postProcess :: Monad m => HaltT m () -> m (PostAction m)
-- | Create a PostAction which runs some process and does
-- redirects.
postProcessRedir :: Monad m => HaltT m ByteString -> m (PostAction m)
-- | Monad transformer for Resource functions which can
-- halt the request processing early with an error or some other
-- response. Values are created with the smart constructors
-- werror and halt.
data HaltT m a
-- | Immediately end processing of the request, returning the response
-- Status. It is the responsibility of the resource to ensure
-- that all necessary response header and body elements have been added
-- in order to make that response code valid.
halt :: Monad m => Status -> HaltT m a
-- | Immediately end processing of this request, returning a 500
-- Internal Server Error response. The response body will contain
-- the reason.
werror :: Monad m => ByteString -> HaltT m a
-- | Immediately end processing of this request, returning a response with
-- the given Status. The response body will contain the reason.
werrorWith :: Monad m => Status -> ByteString -> HaltT m a
-- | The “local” path of the resource URI; the part after any prefix used
-- in dispatch configuration. Of the three path accessors, this is the
-- one you usually want. This is also the one that will change after
-- postAction is called in your resource.
getDispatchPath :: (MonadState s m, HasReqData s) => m [Text]
-- | Character set type, e.g. utf-8. See charsetsProvided.
type Charset = CI ByteString
-- | Indicates whether the resource supports multiple character sets or
-- not. See charsetsProvided
data CharsetsProvided
-- | Indicates that the resource doesn't support any additional character
-- sets, all responses from the resource will have the same character
-- set, regardless of what the client requests.
NoCharset :: CharsetsProvided
-- | The character sets the resource supports along with functions for
-- converting the response body.
CharsetsProvided :: (NonEmpty (Charset, Body -> Body)) -> CharsetsProvided
-- | Shortcut for return . CharsetsProvided
provideCharsets :: Monad m => NonEmpty (Charset, Body -> Body) -> m CharsetsProvided
type HeadersMap = HashMap HeaderName [ByteString]
-- | Add a header to the response.
addResponseHeader :: (MonadState s m, HasReqData s) => HeaderName -> ByteString -> m ()
-- | Replace any existing response headers for the header name with the new
-- value.
putResponseHeader :: (MonadState s m, HasReqData s) => HeaderName -> ByteString -> m ()
-- | Response body type.
type Body = ByteString
-- | Create a response Body from strict Text.
textBody :: Text -> Body
-- | Create a response Body from lazy Text.
lazyTextBody :: Text -> Body
-- | Create a response Body from a String.
strBody :: String -> Body
-- | Use the lazy ByteString as the response body.
writeLBS :: (MonadState s m, HasReqData s) => ByteString -> m ()
-- | Set the response body from a String
writeStr :: (MonadState s m, HasReqData s) => String -> m ()
hAcceptCharset :: HeaderName
hAcceptEncoding :: HeaderName
hAllow :: HeaderName
hETag :: HeaderName
hExpires :: HeaderName
hIfMatch :: HeaderName
hIfNoneMatch :: HeaderName
hIfUnmodifiedSince :: HeaderName
hTransferEncoding :: HeaderName
hVary :: HeaderName
hWWWAuthenticate :: HeaderName