D;9      !"#$%&'()*+,-./012345678None *Context provided when handling any request*A request or response's Content-Type valueMA map of query parameter names to the last-provided value for that parameterHA map of query parameter names to all values provided for that parameterOA map of case insensitive header names to all provided values for that header.A route as Text #A regex pattern for route matching. Handler is an alias for  R, currently provided for semantic reasons, but the two may diverge in the future. dThe main application definition monad, sequence your route handlers and/or middleware in this monad     None'Get last occurrance of each query param    None$*:OTCalls through to 9J; returns the full path of the current request (without the query string)+Gets the HTTP method of the current requestCalls through to :J; returns the full path of the current request (without the query string)Gets full body of the requestGets the headers of the requestGets the headers of the requestGets the headers of the request)Gets all key/values from the query string%Get the last set value for each query\If a query is set without a value (e.g. "/?key") it will appear in the map with a value of ""fGet the value for a given query. A query which was passed without a value (e.g. "/?key") will return Just "" .Gets all values provided for a given query key!,Gets a map of cookies sent with the request."(Get all values set for a specific cookie#'Get the value for a cookie if it is set$Calls through to ;%Calls through to <!. Returns the path's individual = separated chunks. '&Exposes the underlying >.'+Determine whether a route matches a pattern?@ !"#$%&' !"#$%&'% !"#$&'?@ !"#$%&'None9;(EThis class represents all types which can be converted into a valid AG. Feel free to implement additional instances for your own data-types.*A simple newtype wrapper you can use to wrap values, signifying they should be JSON encoded sent with the "application/json" Content-Type.,sRespond to the client immediately. Any statements following this one in the App or Handler Monads will not be run.()*+B,-./01234()*+,()*+, ()*+B,-./01234None$:OT6URun a handler on a matching route. The handler may return any type which implements (MIf a route matches any actions following it in the App monad will not be run.HRoute patterns support pcre regex but do not yet support url parameters.$In the following example if we call  helloHarry then the  helloHandler will run, but NOT the helloHarryHandler since a matching route ceases further execution. For this reason the order you define your routes in matters. wapp :: App () app = do route "/" indexHandler route "/hello.*" helloHandler route "/helloHarry" helloHarryHandler6666None9:;OTf7%Run an http server on the given port. 9-- Run app on port 3000 main :: IO () main = run 3000 appC;Run the app monad on a wai request to obtain a wai responseDDefault 404 response8PRun actions before your handlers and/or perform actions following the response.after= will only be run if a response is provided from some handler7CD8The Action to run before a >Q is processed. The modified request which is returned will be passed to the app. Transform a A before it's sentThe   to wrap with middlewareEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,6787 6% !"#$&'(),*+87CD8      !"#$%&'()*+,-./00123456789:;<=>?@>?A>?*>?BCDE>?FGH>?IJKLMNOMNPMNQMNRMNSMNTMNUMNVMNWMNXMNYMNZMN[MN\MN]MN^MN_MN`MNaMNbMNcMNdMNeMNfMNgMNhMNiMNjMNkMNlMNmMNnMNoMNpMNqMNrMNsMNtMNuMNvMNwMNxMNyMNzMN{MN|MN}MN~MNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMNMN&firefly-0.1.1.0-96HM98jo2fUFbDgUqgRMDAWeb.Firefly.TypesWeb.Firefly.Internal.UtilsWeb.Firefly.RequestWeb.Firefly.ResponseWeb.Firefly.Handler Web.Firefly ReqContext requestBodyrequest ContentTypeQueryMap MultiQueryMap HeaderMapRoutePatternHandlerApptoBStoLBSfromBSfromLBSmkHeaderconvertHeaders fromHeaderMapqsToListconvertQueries simpleQuerygetPath getMethodgetQueryStringgetBody getHeadergetHeaderMulti getHeadersgetQueriesMulti getQueriesgetQuery getQueryMulti getCookiesgetCookieMulti getCookieisSecure getPathInfo waiRequest pathMatches ToResponse toResponseJsonrespond$fToResponse(,,)$fToResponse(,)$fToResponseResponse$fToResponseJson$fToResponseValue$fToResponseMarkupM$fToResponseText$fToResponse[] $fShowJsonrouterun addMiddleware"wai-3.2.1.1-DSq1Gu5n42A3O3Af8s3pDVNetwork.Wai.Internal rawPathInforawQueryStringpathInfobaseGHC.Real/Request ReqReaderfromReqResponse mkResponse runFirefly notFoundResp&http-types-0.11-JkhzrrIf8XQDsD0CGfTuRHNetwork.HTTP.Types.StatusstatusIsServerErrorstatusIsClientErrorstatusIsRedirectionstatusIsSuccessfulstatusIsInformational networkAuthenticationRequired511 status511httpVersionNotSupported505 status505gatewayTimeout504 status504serviceUnavailable503 status503 badGateway502 status502notImplemented501 status501internalServerError500 status500requestHeaderFieldsTooLarge431 status431tooManyRequests429 status429preconditionRequired428 status428upgradeRequired426 status426unprocessableEntity422 status422 imATeapot418 status418expectationFailed417 status417requestedRangeNotSatisfiable416 status416unsupportedMediaType415 status415requestURITooLong414 status414requestEntityTooLarge413 status413preconditionFailed412 status412lengthRequired411 status411gone410 status410 conflict409 status409requestTimeout408 status408proxyAuthenticationRequired407 status407notAcceptable406 status406methodNotAllowed405 status405 notFound404 status404 forbidden403 status403paymentRequired402 status402unauthorized401 status401 badRequest400 status400permanentRedirect308 status308temporaryRedirect307 status307 useProxy305 status305notModified304 status304 seeOther303 status303found302 status302movedPermanently301 status301multipleChoices300 status300partialContent206 status206resetContent205 status205 noContent204 status204nonAuthoritative203 status203 accepted202 status202 created201 status201ok200 status200switchingProtocols101 status101 continue100 status100mkStatusStatus statusCode statusMessage