h*9s6      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                    1.2.0 Safe-Inferred!"#%&'/01369<  webgear-coreThe text/plain MIME type webgear-core&The application/octet-stream MIME type webgear-coreResult of parsing a multipart/form-data body from a request. The body can contain both parameters and files. webgear-core!The multipart/form-data MIME type  webgear-core-A JSON MIME type with customizable media type  webgear-coreJSON with a specific media type webgear-coreapplication/json media type webgear-coreThe text/html MIME type webgear-core/The application/x-www-form-urlencoded MIME type webgear-core6MIME types used in the Accept and Content-Type headers       Safe-Inferred!"#%&'/01369<  webgear-coreModifier used to indicate whether a trait is parsed strictly or leniently. webgear-coreModifier used to indicate whether a trait is required or optional.   Safe-Inferred!"#%&'/01369< ! ! webgear-core A request processed by a handler# webgear-coreunderlying WAI request$ webgear-core!Get the value of a request header% webgear-coreSee & webgear-core4Returns the entire request body as a lazy bytestring' webgear-coreSee ( webgear-coreSee ) webgear-coreSee * webgear-coreSee + webgear-coreSee , webgear-coreSee - webgear-coreSee . webgear-coreSee !"#+'(.)*$-,%&!"#+'(.)*$-,%& Safe-Inferred!"#%&'/01369</ webgear-coreHTTP response body3 webgear-core4An HTTP response sent from the server to the client.3456/1023456/102 Safe-Inferred""#%&'/01369<7 webgear-core7Constraint that proves that all the traits in the list ts are also present in the list qs.8 webgear-core)Type error for nicer UX of missing traits9 webgear-core&Constraint that proves that the trait t# is present in the list of traits ts.: webgear-core"Get the attribute associated with t$ from a witnessed value. See also: L.; webgear-coreA value associated with a list of traits, referred to as a witnessed value. Typically, this is used as an infix type constructor:  a `With` ts where a is a value and ts0 is a list of traits associated with that value.If t( is a type present in the list of types ts, it is possible to extract its attribute from a witnessed value: let witnessedValue :: a `With` ts witnessedValue = ... let attr :: G t a attr = L @t (: witnessedValue) < webgear-coreRetrieve the value= webgear-core Sets h ts a is equivalent to *(Set h t1 a, Set h t2 a, ..., Set h tn a) where ts = [t1, t2, ..., tn].> webgear-core Gets h ts a is equivalent to *(Get h t1 a, Get h t2 a, ..., Get h tn a) where ts = [t1, t2, ..., tn].? webgear-core&Associate a trait attribute on a value@ webgear-coreSet a trait attribute t on the value  a `With` ts.A webgear-core&Extract trait attributes from a value.B webgear-core6Attempt to witness the trait attribute from the value a.C webgear-coreIndicates the constraints a trait depends upon as a prerequisite. This is used to assert that a trait t can be extracted from a value a only if one or more other traits are present in the trait list ts associated with it.If a trait does not depend on other traits this can be set to the empty contraint ().D webgear-coreA trait t that can be retrieved from a but could be absent.E webgear-coreType that indicates that the trait does not exist for a value. This could be an error message, exception etc.F webgear-coreA trait is an attribute t associated with a value a.G webgear-coreType of the associated attribute when the trait holds for a valueH webgear-core>Lift a value to a witnessed value having no associated traits.I webgear-coreForget the head traitJ webgear-coreAttempt to witness an additional trait with a witnessed value. This can fail indicating an E of the trait.K webgear-coreSet a trait attribute on witnessed value to produce another witnessed value with the additional trait attached to it.L webgear-coreRetrieve a trait.pick is used along with :2 to retrieve an attribute from a witnessed value:  pick @t (: val) @ webgear-coreThe trait to set webgear-coreA function to generate a witnessed value. This function must be called by the @/ implementation to generate a witnessed value. webgear-coreAn arrow that attaches a new trait attribute to a witnessed value.B webgear-coreThe trait to witness webgear-core?Arrow that attemtps to witness the trait and can possibly failFGDECAB>?@=;?@=;HIIndicates that the request does not match the current handler.b webgear-coreLifts < into a handler arrow.c webgear-core6Thread a response through commands from left to right.For example, an HTTP 200 response with a body and Content-Type header can be generated with:  (ok200 -< ()) >-> (resp -> setBody "text/plain" -< (resp, "Hello World")) >-> (resp -> unwitnessA -< resp) d webgear-core6Thread a response through commands from right to left.For example, an HTTP 200 response with a body and Content-Type header can be generated with: ! (resp -> unwitnessA -< resp)  -<(resp - setBody "text/plain" -< (resp, "Hello World")) <-< (ok200 -< ()) Z[\]^_`PQUVWRSTYXabcdZ[\]^_`PQUVWRSTYXabcdc1d1 Safe-Inferred!"#%&'/01369<"w webgear-coreServe static assetsww Safe-Inferred!"#%&'/01369<.x webgear-coreA z that is optionaly webgear-coreA z that is requiredz webgear-coreA F for setting a header in the HTTP response. It has a specified name and a value of type val. The header name is compared case-insensitively. The modifier e9 determines whether the header is mandatory or optional.| webgear-coreA ~% that is optional and parsed strictly} webgear-coreA ~% that is required and parsed strictly~ webgear-coreA F+ for capturing an HTTP header of specified name! and converting it to some type val. The modifiers e and p determine how missing headers and parsing errors are handled. The header name is compared case-insensitively. webgear-coreError in converting a header webgear-coreIndicates a missing header webgear-core9Extract a header value and convert it to a value of type val.(The associated trait attribute has type val.Example usage: 8header @"Content-Length" @Integer errorHandler okHandler webgear-coreExtract an optional header value and convert it to a value of type val.(The associated trait attribute has type  Maybe val; a Nothing> value indicates that the header is missing from the request.Example usage: optionalHeader @"Content-Length" @Integer errorHandler okHandler webgear-core9Extract a header value and convert it to a value of type val.(The associated trait attribute has type Either Text val. The parsing is done leniently and any errors are reported in the trait attribute.Example usage: ?lenientHeader @"Content-Length" @Integer errorHandler okHandler webgear-core9Extract a header value and convert it to a value of type val.(The associated trait attribute has type Maybe (Either Text val). The parsing is done leniently. Any parsing errors and missing header are reported in the trait attribute.Example usage: 8optionalLenientHeader @"Content-Length" @Integer handler webgear-core!Set a header value in a response.Example usage: :response' <- setHeader @"Content-Length" -< (response, 42) webgear-core+Set an optional header value in a response.Setting the header to  will remove it from the response if it was previously set. The header will be considered as optional in all relevant places (such as documentation).Example usage: response' <- setOptionalHeader @"Content-Length" -< (response, Just 42) webgear-coreMatch the Accept header of the incoming request with the specified mediatype. Another handler will be tried if the match fails.Example usage:  acceptMatch  handler  webgear-core error handler webgear-core Error handler webgear-core Error handler webgear-core Error handler~}|z{yx~}|z{yx  Safe-Inferred!"#%&'/01369<4M webgear-core$Trait for a cookie in HTTP responses webgear-core#Trait for a cookie in HTTP requests webgear-core1Error in converting a cookie to the expected type webgear-coreIndicates a missing cookie webgear-core3Extract a cookie and convert it to a value of type val.(The associated trait attribute has type val.Example usage: .cookie @"name" @Integer errorHandler okHandler webgear-core=Extract an optional cookie and convert it to a value of type val.(The associated trait attribute has type  Maybe val; a Nothing> value indicates that the cookie is missing from the request.Example usage: 6optionalCookie @"name" @Integer errorHandler okHandler webgear-core!Set a cookie value in a response.Example usage: 4response' <- setCookie @"name" -< (response, cookie) webgear-core+Set an optional cookie value in a response.Setting the cookie to  will remove it from the response if it was previously set. The cookie will be considered as optional in all relevant places (such as documentation).Example usage: It is also idiomatic to use the template haskell quasiquoter   or   in cases where both an HTTP method and a path need to be matched.  Safe-Inferred!"#%&'/01369<A  webgear-coreTrait to indicate that no more path components are present in the request webgear-coreFailure to extract a  webgear-coreA path variable that is extracted and converted to a value of type val. The tag is usually a type-level symbol (string) to uniquely identify this variable. webgear-coreA path component which is literally matched against the request but discarded after that. webgear-core)A middleware that literally matches path s. The symbol s could contain one or more parts separated by a forward slash character. The route will be rejected if there is no match.For example, the following code could be used to match the URL path "a/b/c" and then invoke handler: path "a/b/c" handler webgear-coreA middleware that captures a path variable from a single path component.3The value captured is converted to a value of type val. The route will be rejected if the value is not found or cannot be converted.For example, the following code could be used to read a path component as 2 tagged with the symbol "objId", and then invoke handler: pathVar @"objId" @Int handler webgear-core7A middleware that verifies that end of path is reached. webgear-coreProduces middleware(s) to match an optional HTTP method and some path components.This middleware matches a prefix of path components, the remaining components can be matched by subsequent uses of .-This quasiquoter can be used in several ways: QuasiQuoterEquivalent Middleware[match| /a/b/c |] "/a/b/c"atch| /a/b/objId:Int/d |] "/a/b" .  @"objId" @Int .  "d"[match| GET /a/b/c |] GET .  "/a/b/c"[match| GET /a/b/objId:Int/d |] GET .  "/a/b" .  @"objId" @Int .  "d" webgear-coreProduces middleware(s) to match an optional HTTP method and the entire request path.This middleware is intended to be used in cases where the entire path needs to be matched. Use : middleware to match only an initial portion of the path.-This quasiquoter can be used in several ways: QuasiQuoterEquivalent Middleware[route| /a/b/c |] "/a/b/c" . oute| /a/b/objId:Int/d |] "/a/b" .  @"objId" @Int .  "d" . [route| GET /a/b/c |] GET .  "/a/b/c" . [route| GET /a/b/objId:Int/d |] GET .  "/a/b" .  @"objId" @Int .  "d" . )  Safe-Inferred!"#%&'/01369<I  webgear-core%Error in converting a query parameter webgear-core#Indicates a missing query parameter webgear-core% that is optional and parsed strictly webgear-core% that is required and parsed strictly webgear-core+Capture a query parameter with a specified name$ and convert it to a value of type val. The type parameter e denotes whether the query parameter is required to be present. The parse style parameter p determines whether the conversion is applied strictly or leniently. webgear-core=Extract a query parameter and convert it to a value of type val.(The associated trait attribute has type val.Example usage: 3queryParam @"limit" @Integer errorHandler okHandler webgear-coreExtract an optional query parameter and convert it to a value of type val.(The associated trait attribute has type  Maybe val; a Nothing value indicates that the parameter is missing from the request.Example usage: ;optionalQueryParam @"limit" @Integer errorHandler okHandler webgear-coreExample usage: $jwtAuth cfg errorHandler nextHandlerThe  errorHandler< is invoked if the credentials are invalid or missing. The  nextHandler< is invoked if the credentials were retrieved successfully. webgear-coreMiddleware to add optional JWT authentication protection for a handler. Expects the JWT to be available via a standard bearer authorization header in the format: Authorization: Bearer Example usage: optionalJWTAuth cfg handlerThis middleware will not fail if authorization credentials are invalid or missing. Instead the trait attribute is of type  ( e) t so that the handler can process the authentication error appropriately. webgear-coreMiddleware to add JWT authentication protection for a handler. Expects the JWT to be available via an authorization header in the format: Authorization: Example usage: 1jwtAuth' @"" cfg errorHandler nextHandlerThe  errorHandler< is invoked if the credentials are invalid or missing. The  nextHandler< is invoked if the credentials were retrieved successfully. webgear-coreMiddleware to add JWT authentication protection for a handler. Expects the JWT to be available via an authorization header in the format: Authorization: Example usage: ,optionalJWTAuth' @"" cfg nextHandlerThis middleware will not fail if authorization credentials are invalid or missing. Instead the trait attribute is of type  ( e) t so that the handler can process the authentication error appropriately. webgear-coreAuthentication configuration webgear-core Error handler webgear-coreAuthentication configuration webgear-coreAuthentication configuration webgear-core Error handler webgear-coreAuthentication configuration Safe-Inferred""#%&'/01369<mv  webgear-core1Error retrieving basic authentication credentials webgear-core?Basic authentication credentials retrieved from an HTTP request webgear-core"Password for basic authentication. webgear-coreUsername for basic authentication. Valid usernames cannot contain ':' characters. webgear-core-Trait for HTTP basic authentication with the Basic scheme. webgear-core%Trait for HTTP basic authentication: #https://tools.ietf.org/html/rfc7617 webgear-core:Convert the credentials to the trait attribute or an error webgear-coreMiddleware to add basic authentication protection for a handler.Example usage: &basicAuth cfg errorHandler nextHandlerThe  errorHandler< is invoked if the credentials are invalid or missing. The  nextHandler< is invoked if the credentials were retrieved successfully. webgear-core Similar to - but supports a custom authentication scheme.Example usage: 1basicAuth' @"scheme" cfg errorHandler nextHandler webgear-coreMiddleware to add optional basic authentication protection for a handler.Example usage: !optionalBasicAuth cfg nextHandlerThis middleware will not fail if credentials are invalid or missing. Instead the trait attribute is of type  ( e) t so that the handler can process the authentication error appropriately. webgear-core Similar to 0 but supports a custom authentication scheme.Example usage: ,optionalBasicAuth' @"scheme" cfg nextHandler webgear-coreAuthentication configuration webgear-core Error handler webgear-coreAuthentication configuration webgear-core Error handler webgear-coreAuthentication configuration webgear-coreAuthentication configuration Safe-Inferred!"#%&'/01369<n webgear-core=Constraints that include a set of common traits for handlers.The type variables are:h - The handler arrowm& - The underlying monad of the handler~yz{}|x Safe-Inferred!"#%&'/01369<p?@ABFGGDEC>=;<9:78ELHIJK!"#.-%'(+)*,$&3456/102 Z[\]^X_`PQUVWRSTYabcdw~yz{}|x    !!""#$%&'()*+,-./01123456789:;<=>?@ABBCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^__`aabcdefghijjklmnopqrstuvwxyz{|}~                                                                                                                                    46789:;<= )webgear-core-1.2.0-HZqima91g7JI7Sqaj73yznWebGear.Core.MIMETypesWebGear.Core.ModifiersWebGear.Core.RequestWebGear.Core.ResponseWebGear.Core.TraitWebGear.Core.HandlerWebGear.Core.Handler.StaticWebGear.Core.Trait.HeaderWebGear.Core.Trait.CookieWebGear.Core.Trait.MethodWebGear.Core.Trait.PathWebGear.Core.Trait.QueryParamWebGear.Core.Trait.StatusWebGear.Core.Trait.BodyWebGear.Core.Trait.Auth.CommonWebGear.Core.Trait.Auth.JWTWebGear.Core.Trait.Auth.BasicWebGear.Core.Traits webgear-coreJSONmatchroute PlainText WebGear.Core OctetStreamFormDataResultformDataParams formDataFilesFormData parseOptionsbackendOptions JSONMediaHTMLFormURLEncodedMIMETypemimeType$fMIMETypeFormURLEncoded$fMIMETypeHTML$fMIMETypeJSON$fMIMETypeFormData$fMIMETypeOctetStream$fMIMETypePlainText ParseStyleStrictLenient ExistenceRequiredOptionalRequest toWaiRequest requestHeadergetRequestBodyChunkgetRequestBody httpVersionisSecurepathInfo queryString remoteHostrequestBodyLengthrequestHeaders requestMethod ResponseBodyResponseBodyFileResponseBodyBuilderResponseBodyStreamResponse ResponseRaw ResponseCont HaveTraits MissingTraitHasTraitfromWith unwitnessSetsGetsSetsetTraitGetgetTrait Prerequisite TraitAbsenceAbsenceTrait Attributewzerowminusprobeplantpick $fHasTraitt: $fHasTraitt:0 $fHasTraitt[] RouteMismatchSummary getSummary DescriptiongetDescription MiddlewareRequestHandlerHandlerarrM consumeRoutesetDescription setSummary RoutePath routeMismatch unwitnessA>-><-<$fIsListRoutePath$fMonoidRouteMismatch$fSemigroupRouteMismatch$fShowRouteMismatch$fEqRouteMismatch$fOrdRouteMismatch $fEqSummary $fOrdSummary $fShowSummary $fReadSummary$fIsStringSummary$fEqDescription$fOrdDescription$fShowDescription$fReadDescription$fIsStringDescription$fShowRoutePath $fEqRoutePath serveStaticOptionalResponseHeaderRequiredResponseHeaderResponseHeaderOptionalRequestHeaderRequiredRequestHeader RequestHeaderHeaderParseErrorHeaderNotFoundheaderoptionalHeader lenientHeaderoptionalLenientHeader setHeadersetOptionalHeader acceptMatch&$fTraitAbsenceTYPERequestHeaderRequest$fTraitTYPERequestHeaderRequest'$fTraitAbsenceTYPERequestHeaderRequest0 $fTraitTYPERequestHeaderRequest0'$fTraitAbsenceTYPERequestHeaderRequest1 $fTraitTYPERequestHeaderRequest1'$fTraitAbsenceTYPERequestHeaderRequest2 $fTraitTYPERequestHeaderRequest2!$fTraitTYPEResponseHeaderResponse"$fTraitTYPEResponseHeaderResponse0$fReadHeaderParseError$fShowHeaderParseError$fEqHeaderParseError$fReadHeaderNotFound$fShowHeaderNotFound$fEqHeaderNotFound SetCookieCookieCookieParseErrorCookieNotFoundcookieoptionalCookie setCookiesetOptionalCookie$fTraitAbsenceTYPECookieRequest$fTraitTYPECookieRequest $fTraitAbsenceTYPECookieRequest0$fTraitTYPECookieRequest0$fTraitTYPESetCookieResponse$fTraitTYPESetCookieResponse0$fReadCookieParseError$fShowCookieParseError$fEqCookieParseError$fReadCookieNotFound$fShowCookieNotFound$fEqCookieNotFoundMethodMismatchexpectedMethod actualMethodMethodmethod$fTraitTYPEMethodRequest$fTraitAbsenceTYPEMethodRequestPathEnd PathVarErrorPathVarNotFoundPathVarParseErrorPathVarPathpathpathVarpathEnd$fTraitAbsenceTYPEPathRequest$fTraitTYPEPathRequest$fTraitTYPEPathVarRequest $fTraitAbsenceTYPEPathVarRequest $fTraitAbsenceTYPEPathEndRequest$fTraitTYPEPathEndRequest$fEqPathVarError$fShowPathVarError$fReadPathVarErrorParamParseError ParamNotFoundOptionalQueryParamRequiredQueryParam QueryParam queryParamoptionalQueryParamlenientQueryParamoptionalLenientQueryParam#$fTraitAbsenceTYPEQueryParamRequest$fTraitTYPEQueryParamRequest$fTraitTYPEQueryParamRequest0$fTraitTYPEQueryParamRequest1$fTraitTYPEQueryParamRequest2$$fTraitAbsenceTYPEQueryParamRequest0$$fTraitAbsenceTYPEQueryParamRequest1$$fTraitAbsenceTYPEQueryParamRequest2$fReadParamParseError$fShowParamParseError$fEqParamParseError$fReadParamNotFound$fShowParamNotFound$fEqParamNotFoundStatus mkResponse continue100switchingProtocols101ok200 created201 accepted202nonAuthoritative203 noContent204resetContent205partialContent206multipleChoices300movedPermanently301found302 seeOther303notModified304temporaryRedirect307permanentRedirect308 badRequest400unauthorized401paymentRequired402 forbidden403 notFound404methodNotAllowed405notAcceptable406proxyAuthenticationRequired407requestTimeout408 conflict409gone410lengthRequired411preconditionFailed412requestEntityTooLarge413requestURITooLong414unsupportedMediaType415requestedRangeNotSatisfiable416expectationFailed417 imATeapot418unprocessableEntity422preconditionRequired428tooManyRequests429requestHeaderFieldsTooLarge431internalServerError500notImplemented501 badGateway502serviceUnavailable503gatewayTimeout504httpVersionNotSupported505 networkAuthenticationRequired511$fTraitTYPEStatusResponseUnknownContentBodyBody requestBodysetBodysetBodyWithoutContentTyperespondA$fTraitTYPEBodyResponse$fTraitAbsenceTYPEBodyRequest$fTraitTYPEBodyRequest%$fTraitTYPEUnknownContentBodyResponse AuthToken authScheme authTokenRealmAuthorizationHeaderrespondUnauthorized$fFromHttpApiDataAuthToken $fEqRealm $fOrdRealm $fShowRealm $fReadRealm$fIsStringRealm JWTAuthErrorJWTAuthHeaderMissingJWTAuthSchemeMismatchJWTAuthTokenBadFormatJWTAuthAttributeErrorJWTAuthJWTAuth'#$sel:jwtValidationSettings:JWTAuth'$sel:jwkSet:JWTAuth'$sel:toJWTAttribute:JWTAuth'jwtAuthoptionalJWTAuthjwtAuth'optionalJWTAuth'!$fTraitAbsenceTYPEJWTAuth'Request$fTraitTYPEJWTAuth'Request$fTraitTYPEJWTAuth'Request0"$fTraitAbsenceTYPEJWTAuth'Request0$fEqJWTAuthError$fShowJWTAuthErrorBasicAuthErrorBasicAuthHeaderMissingBasicAuthSchemeMismatchBasicAuthCredsBadFormatBasicAuthAttributeError Credentials$$sel:credentialsUsername:Credentials$$sel:credentialsPassword:CredentialsPasswordUsername BasicAuth BasicAuth' $sel:toBasicAttribute:BasicAuth' basicAuth basicAuth'optionalBasicAuthoptionalBasicAuth'#$fTraitAbsenceTYPEBasicAuth'Request$fTraitTYPEBasicAuth'Request$fTraitTYPEBasicAuth'Request0$$fTraitAbsenceTYPEBasicAuth'Request0$fEqBasicAuthError$fShowBasicAuthError$fReadBasicAuthError$fEqCredentials$fOrdCredentials$fShowCredentials$fReadCredentials $fEqPassword $fOrdPassword$fShowPassword$fReadPassword$fIsStringPassword $fEqUsername $fOrdUsername$fShowUsername$fReadUsername$fIsStringUsername StdHandler wai-3.2.4-9Rvl8IwZnPnCdzFsZVqO4CNetwork.Wai.Internalbase Control.Arrow ArrowChoice ArrowPlus GHC.MaybeNothing headerHandler cookieHandlerghc-prim GHC.TypesInt text-2.0.2Data.Text.InternalText'http-types-0.12.4-7ravU9ZeEhYD9G3h69uf3Network.HTTP.Types.Status Data.EitherEitherrightleft|||+++Kleisli runKleisli ArrowLooploop ArrowMonad ArrowApplyapp<+> ArrowZero zeroArrowArrowarrfirst***second&&&Control.Category>>><<<returnA^>>>>^<<^^<<leftApp Data.Textfoldrmapheadtailinitstails intersperse transposetakedropsplitAt takeWhile dropWhilespanbreakfilter partitiongroup isPrefixOf findIndexzipzipWithwordsunwordslinesunlinesindextoUpperemptynullData.Text.Show singletonfoldr'foldlfoldl'toLowercountlengthgroupByunfoldrunpackCString#concatunconslastinitfoldl1foldl1'scanlscanl1foldr1scanrscanr1maximumminimum replicatereverseanyallelem concatMapisAsciitoTitlefind dropWhileEnd stripPrefix isSuffixOf isInfixOf intercalate mapAccumL mapAccumRconsappendcopysnocunsnocsplitOnreplace stripSuffixcenterpackunpacktakeEnd takeWhileEnddropEndsplitunfoldrN compareLengthstripchunksOf toCaseFoldunpackCStringAscii# justifyLeft justifyRight measureOff dropAround stripStartstripEndspanMspanEndMbreakOn breakOnEnd breakOnAllcommonPrefixes