Īõ³h& ģRņ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq Safe-Inferred"¤twain%Parse values from request parameters.twain4Default implementation parses comma-delimited lists.twainĖ is an Either-like monad that can "short-circuit" and return a response, or pass control to the next middleware. This provides convenient branching with do notation for redirects, error responses, etc. twainUseful for creating - instances for things that already implement r.       Safe-Inferred"KstwainParse form request body.ttwainParse JSON request body.uvwxyz{|st}~€‚ƒ Safe-Inferred"ć+Ftwain Route request matching optional „ and  to .Gtwain#Respond if no other route responds.Sets the status to 404.Itwain+Specify maximum request body size in bytes.Defaults to 64KB.JtwainSpecify …" to use when parsing request body.KtwainČGet a parameter. Looks in query, path, cookie, and body (in that order).7If no parameter is found, or parameter fails to parse, cÅ is called which passes control to subsequent routes and middleware.Ltwain5Get a parameter or error if missing or parse failure.MtwainGet an optional parameter.Returns † for missing parameter. Throws   on parse failure.NtwainĘGet all parameters from query, path, cookie, and body (in that order).OtwainGet a query parameter.7If no parameter is found, or parameter fails to parse, cÅ is called which passes control to subsequent routes and middleware.Ptwain;Get a query parameter or error if missing or parse failure.Qtwain Get an optional query parameter.Returns † for missing parameter. Throws   on parse failure.RtwainGet all query parameters.StwainGet a path parameter.7If no parameter is found, or parameter fails to parse, cÅ is called which passes control to subsequent routes and middleware.Ttwain:Get a path parameter or error if missing or parse failure.UtwainGet an optional path parameter.Returns † for missing parameter. Throws   on parse failure.VtwainGet all path parameters.WtwainGet a cookie parameter.7If no parameter is found, or parameter fails to parse, cÅ is called which passes control to subsequent routes and middleware.XtwainHello, World!" Modify the j: *send $ status status404 $ text "Not Found"Send a response k: :send $ withHeader (hServer, "Twain + Warp") $ text "Hello"Send a response l: ,send $ withCookie "key" "val" $ text "Hello"ctwain-Pass control to the next route or middleware.dtwain Construct a Š response.1Sets the Content-Type and Content-Length headers.etwainConstruct an HTML response.1Sets the Content-Type and Content-Length headers.ftwain Construct a JSON response using ‹.1Sets the Content-Type and Content-Length headers.gtwainConstruct a CSS response.1Sets the Content-Type and Content-Length headers.htwainConstruct an XML response.1Sets the Content-Type and Content-Length headers.itwain%Construct a raw response from a lazy Œ.*Sets the Content-Length header if missing.jtwainSet the  for a ‰.ktwainAdd a ‡ to response.ltwain:Add a cookie to the response with the given key and value.Note: This uses Ž.mtwainAdd a  to the response.ntwain;Add a header to expire (unset) a cookie with the given key.otwain?Create a redirect response with 301 status (Moved Permanently).ptwain3Create a redirect response with 302 status (Found).qtwain2Create a redirect response 303 status (See Other).µ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«„¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢ͇ĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéˆźėģķīļšńņóōõö÷ųł‰śūüżž’€‚ƒ ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq<ABCDEFGKLMNOQPRSUTVWYXZ[\]^_`abcopqdefhgijklmn HJI„       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Šs‹Œ‡Ž‘’“”•–—˜™š›‡œžŸ žŸ”‡¢£‡¢¤‡¢„‡¢¦‡¢§‡¢Ø‡¢§‡¢©‡Ŗ«‡Ŗ¬‡­®‡­Æ‡­°‡­±‡­²‡­³‡­“‡­µ‡­¶‡­·‡­ø‡­¹‡­ŗ‡­»‡­¼‡­½‡­¾‡­æ‡­Ą‡­Į‡­Ā‡­Ć‡­Ä‡­Å‡­Ę‡­Ē‡­Č‡­É‡­Ź‡­Ė‡­Ģ‡œĶ‡œĪ‡œĻ‡œŠ‡œŃ‡œŅ‡œÓ‡œŌ‡œÕ‡œÖ‡œ×‡œŲ‡œŁ‡œŚ‡œŪ‡œÜ‡œŻ‡œŽ‡œß‡œą‡œį‡œā‡œć‡œä‡œå‡œę‡œē‡œč‡œé‡œź‡œė‡œģ‡œķ‡œī‡œļ‡œš‡œń‡œņ‡œó‡œō‡œõ‡œö‡œ÷‡œų‡œł‡œś‡œū‡œü‡œż‡œž‡œ’‡œ€‡œ‡œ‚‡œƒ‡œ„‡œ…‡œ†‡œ‡‡œˆ‡œ‰‡œŠ‡œ‹‡œŒ‡œ‡œŽ‡œ‡œ‡œ‘‡œ’‡œ“‡œ”‡œ•‡œ–‡œ—‡œ˜‡œ™‡œš‡œ›‡œœ‡œ‡œž‡œŸ‡œ ‡œ”‡œ¢‡œ£‡œ¤‡œ„‡œ¦‡œ§‡œØ‡œ©‡œŖ‡œ«‡œ¬‡œ­‡œ®‡œÆ‡œ°‡œ±‡œ‡œ²‡ˆ³‡ˆ“‡ˆµ‡ˆ¶‡ˆ·‡ˆø‡ˆ¹‡ˆŗ‡ˆ»‡ˆ¼‡ˆ½‡ˆ¾‡ˆæ‡ˆĄ‡ˆĮ‡ˆĀ‡ˆĆ‡ˆÄ‡ˆÅ‡ˆĘ‡ˆĒ‡ˆČ‡É‡Ź‡Ė‡Ģ‡Ķ‡Ī‡Ļ‡Š‡Ń‡Ņ‡Ó‡Ō‡Õ‡Ö‡×‡Ų‡Ł‡Ś‡Ū‡Ü‡Ż‡Ž‡ß‡ą‡į‡ā‡ć‡ä‡å‡ę‡ē‡čéźéėéģéķéīéļéšéńéņéóéōéõéöé÷éųéłéśéūéüżž’€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”’•–—$twain-2.1.2.0-JSauJGqxb6fEShyW8tK6ur Web.TwainWeb.Twain.TypesWeb.Twain.Internal)wai-extra-3.1.13.0-4rORWxo5CbFGe1wRCzfvUPNetwork.Wai.Parse fileContentfileContentTypefileNameFileInfo ParsableParam parseParamparseParamList PathPattern MatchPathParam HttpError ParsedBodyFormBodyJSONBodyResponderOptionsoptsMaxBodySize optsParseBody ParsedRequestpreqBodypreqCookieParamspreqPathParamspreqQueryParams RouteActionRespondNext ResponderM matchPath readEither$fMonadCatchResponderM$fMonadThrowResponderM$fMonadIOResponderM$fMonadResponderM$fApplicativeResponderM$fFunctorResponderM$fExceptionHttpError$fIsStringPathPattern$fParsableParamNatural$fParsableParamWord64$fParsableParamWord32$fParsableParamWord16$fParsableParamWord8$fParsableParamWord$fParsableParamInteger$fParsableParamInt64$fParsableParamInt32$fParsableParamInt16$fParsableParamInt8$fParsableParamInt$fParsableParamFloat$fParsableParamDouble$fParsableParamBool$fParsableParam[]$fParsableParam()$fParsableParamChar$fParsableParamByteString$fParsableParamByteString0$fParsableParamText$fParsableParamText0 $fEqHttpError$fShowHttpErrorgetputpatchpostdeleteroutenotFound onExceptionwithMaxBodySizewithParseBodyOptsparam paramEither paramMaybeparams queryParamqueryParamEitherqueryParamMaybe queryParams pathParampathParamEitherpathParamMaybe pathParams cookieParamcookieParamEithercookieParamMaybe cookieParamsfile fileMaybefilesfromBodyheaderheadersrequestsendnexttexthtmljsoncssxmlrawstatus withHeader withCookie withCookie' expireCookie redirect301 redirect302 redirect303baseGHC.ReadRead parseBodyForm parseBodyJson parsedReqKeyresponderOptsKeydefaultResponderOpts getRequest setRequest concatParams parseRequestmatchwrapErr wrapMaxReqErr wrapParseErrparseCookieParamssetCookieByteStringdecodeQueryParam decodeBsParam(http-types-0.12.3-L3rcKlUfVN0BViQ440kXJlNetwork.HTTP.Types.MethodMethodParseRequestBodyOptions GHC.MaybeNothingNetwork.HTTP.Types.HeaderHeader wai-3.2.3-4cXy7zNNy7HCJv6kZNIp8hNetwork.Wai.InternalRequestResponse text-1.2.5.0Data.Text.InternalText$aeson-2.1.2.1-1CP91TiqJNMKhmZsERtItUData.Aeson.Types.ToJSONToJSONbytestring-0.11.3.1Data.ByteString.Lazy.Internal ByteStringNetwork.HTTP.Types.StatusStatus#cookie-0.4.6-5vy9yyVLJTw1SJvSixS3wD Web.CookiedefaultSetCookie SetCookieNetwork.HTTP.Types.Versionhttp20http11http10http09 HttpVersion httpMinor httpMajorNetwork.HTTP.Types.QueryLike QueryLiketoQueryNetwork.HTTP.Types.URIrenderQueryBuilderPartialEscaperenderQueryPartialEscape decodePath encodePath extractPathdecodePathSegmentsencodePathSegmentsRelativeencodePathSegments urlDecode urlEncodeurlEncodeBuilderparseSimpleQuery parseQueryrenderSimpleQuery renderQueryrenderQueryBuildersimpleQueryToQueryparseQueryTextqueryToQueryTextrenderQueryTextqueryTextToQuery QueryItemQuery QueryTextSimpleQueryItem SimpleQuery EscapeItemQEQNPartialEscapeQueryItemPartialEscapeQuerystatusIsServerErrorstatusIsClientErrorstatusIsRedirectionstatusIsSuccessfulstatusIsInformational networkAuthenticationRequired511 status511httpVersionNotSupported505 status505gatewayTimeout504 status504serviceUnavailable503 status503 badGateway502 status502notImplemented501 status501internalServerError500 status500requestHeaderFieldsTooLarge431 status431tooManyRequests429 status429preconditionRequired428 status428unprocessableEntity422 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 status100mkStatus statusMessage statusCoderenderStdMethod renderMethod parseMethod methodPatch methodOptions methodConnect methodTrace methodDelete methodPut methodHead methodPost methodGet StdMethodPATCHOPTIONSCONNECTTRACEDELETEPUTHEADGETPOSTparseByteRangesrenderByteRangesrenderByteRangesBuilderrenderByteRangerenderByteRangeBuilderhCookie hUserAgenthServerhRefererhRange hLocation hLastModifiedhIfRangehIfModifiedSincehDate hContentType hContentMD5hContentLengthhContentEncoding hConnection hCacheControlhAuthorizationhAcceptLanguagehAccept HeaderNameRequestHeadersResponseHeaders ByteRangeByteRangeSuffix ByteRangeFromByteRangeFromTo ByteRanges Network.WaiconsumeRequestBodyLazylazyRequestBodyconsumeRequestBodyStrictstrictRequestBody ifRequestmodifyResponsedefaultRequestmapResponseStatusmapResponseHeadersresponseToStreamresponseHeadersresponseStatus responseRawresponseStream responseLBSresponseBuilder responseFile Application MiddlewaregetRequestBodyChunkrequestHeaderUserAgentrequestHeaderRefererrequestHeaderRangerequestHeaderHostrequestBodyLength requestBody queryStringpathInfo remoteHostisSecurerawQueryString rawPathInfo httpVersionrequestHeadersvault requestMethod StreamingBodyRequestBodyLength ChunkedBody KnownLengthFilePartfilePartFileSizefilePartByteCountfilePartOffsetResponseReceived