Îõŗh$ĶÂä      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcNone Ģtwain%Parse values from request parameters.twain4Default implementation parses comma-delimited lists.twainĀ is a Reader-like monad that can "short-circuit" and return a WAI response using a given environment. This provides convenient branching with do notation for redirects, error responses, etc.twainÆTwainM provides a monad interface for composing routes and middleware. twainUseful for creating - instances for things that already implement d.!  !  None  efghijklmnopqrNone à ?twainRun a Twain app on s using the given environment.ĀIf a PORT environment variable is set, it will take precendence. twain 8080 "My App" $ do middleware logger get "/" $ do appTitle <- env send $ text ("Hello from " <> appTitle) get "/greetings/:name" name <- param "name" send $ text ("Hello, " <> name) notFound $ do send $ status status404 $ text "Not Found"@twainRun a Twain app passing Warp t.Atwain Create a WAI u" from a Twain app and environment.Btwain‡Use the given middleware. The first declared is the outermost middleware (it has first access to request and last action on response).HtwainÖAdd a route if nothing else is found. This matches any request, so it should go last.Itwain Render a v on exceptions.JtwainAdd a route matching w (optional) and .KtwainGet the app environment.LtwainČGet a parameter. Looks in query, path, cookie, and body (in that order).7If no parameter is found, or parameter fails to parse, VÅ is called which passes control to subsequent routes and middleware.Mtwain5Get a parameter or error if missing or parse failure.NtwainGet an optional parameter. x5 is returned for missing parameter or parse failure.OtwainÆGet all parameters from query, path, cookie, and body (in that order).Ptwain Get uploaded y.QtwainGet all uploaded files.RtwainGet the value of a request z$. Header names are case-insensitive.StwainGet the request headers.Ttwain Get the WAI {.UtwainSend a v. send $ text "Hello, World!"Send an X response: $send $ html "

Hello, World!

" Modify the \: *send $ status status404 $ text "Not Found"Send a response ]: :send $ withHeader (hServer, "Twain + Warp") $ text "Hello"Send a response ^: ,send $ withCookie "key" "val" $ text "Hello"Vtwain-Pass control to the next route or middleware.Wtwain Construct a | response.1Sets the Content-Type and Content-Length headers.XtwainConstruct an HTML response.1Sets the Content-Type and Content-Length headers.Ytwain Construct a JSON response using }.1Sets the Content-Type and Content-Length headers.ZtwainConstruct an XML response.1Sets the Content-Type and Content-Length headers.[twain%Construct a raw response from a lazy ~.\twainSet the  for a v.]twainAdd a z to response.^twain:Add a cookie to the response with the given key and value.Note: This uses €._twainAdd a  to the response.`twain;Add a header to expire (unset) a cookie with the given key.atwain?Create a redirect response with 301 status (Moved Permanently).btwain3Create a redirect response with 302 status (Found).ctwain2Create a redirect response 303 status (See Other).‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œwžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋzĀÁÂÃÄÅÆĮ   ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc%?@ABCDEFGHIJKLMNOPQRSTUVabcWXYZ[\]^_`Č       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwuxyz{|z}~€d‚ƒ„…†‡ˆz}‰Š‹ŒŽ‘’“”•–—•–˜™š™›™œ™™ž™ž™Ÿ™ ĄĸĄŖ¤Ĩ¤Ļ¤§¤¨¤Š¤Ē¤Ģ¤Ŧ¤­¤Ž¤¯¤°¤ą¤˛¤ŗ¤´¤ĩ¤ļ¤ˇ¤¸¤š¤ē¤ģ¤ŧ¤Ŋ¤ž¤ŋ¤Ā¤Á¤Â¤Ã“ēœƓĮ“Č“É“Ę“Ë“Ė“Í“Î“Ī“Đ“Ņ“Ō“Ķ“Ô“Õ“Ö“×“Ø“Ų“Ú“Û“Ü“Ũ“Ū“ß“ā“á“â“ã“ä“哿“į“č“é“ę“ë“ė“í“î“ī“đ“ņ“ō“ķ“ô“õ“ö“÷“ø“ų“ú“û“ü“ũ“ū“˙“€““‚“ƒ“„“…“†“‡“ˆ“‰“Š“‹“Œ““Ž“““‘“’“““”“•“–“—“˜“™“š“›“œ““ž“Ÿ“ “Ą“ĸ“Ŗ“¤“Ĩ“Ļ“§“”“¨“Ѐǀ̀Ŧ€­€Ž€¯€°€ą€˛€ŗ€´€ĩ€ļ€ˇ€¸€š€ē€ģ€ŧ€Ŋ€ž€ŋ‡Ā‡Á‡Â‡Ã‡Ä‡Å‡Æ‡Į‡Č‡É‡Ę‡Ë‡Ė‡Í‡Î‡Ī‡Đ‡Ņ‡Ō‡Ķ‡Ô‡Õ‡Ö‡×‡Ø‡Ų‡Ú‡Û‡Ü‡Ũ‡Ū‡ßā$twain-1.0.0.0-Ghx1sV1WMYzIrUI9o4hy1lWeb.Twain.Types Web.TwainWeb.Twain.Internal ParsableParam parseParamparseParamList PathPattern MatchPathParam RouteState reqBodyParams reqBodyFiles reqPathParamsreqQueryParamsreqCookieParams reqBodyJson reqBodyParsedreqEnvreqWai RouteActionRespondNextRouteM TwainState middlewares environmentonExceptionResponseTwainMmodifyexec matchPath readEither $fMonadTwainM$fApplicativeTwainM$fFunctorTwainM$fMonadIORouteM $fMonadRouteM$fApplicativeRouteM$fFunctorRouteM$fIsStringPathPattern$fParsableParamNatural$fParsableParamWord64$fParsableParamWord32$fParsableParamWord16$fParsableParamWord8$fParsableParamWord$fParsableParamInteger$fParsableParamInt64$fParsableParamInt32$fParsableParamInt16$fParsableParamInt8$fParsableParamInt$fParsableParamFloat$fParsableParamDouble$fParsableParamBool$fParsableParam[]$fParsableParam()$fParsableParamChar$fParsableParamByteString$fParsableParamByteString0$fParsableParamText$fParsableParamText0twaintwain'twainApp middlewaregetputpatchpostdeletenotFound onExceptionaddRouteenvparamparam' paramMaybeparamsfilefilesheaderheadersrequestsendnexttexthtmljsonxmlrawstatus withHeader withCookie withCookie' expireCookie redirect301 redirect302 redirect303baseGHC.ReadReadMaxRequestSizeBytes routeState setRouteState concatParamscomposeMiddlewarerouteMiddlewarematch parseBody parseBodyJson cookieParamssetCookieByteStringdecodeQueryParam decodeBsParamemptyApp"warp-3.3.15-5UxlnVegL1j3GehOAXVKrXNetwork.Wai.Handler.Warp.TypesPort!Network.Wai.Handler.Warp.SettingsSettings wai-3.2.3-BtsTuDoJfjg4cSaHMuaivx Network.Wai ApplicationNetwork.Wai.InternalResponse(http-types-0.12.3-FyvjSRU0j1GJ1f6NkRv9JGNetwork.HTTP.Types.MethodMethod GHC.MaybeNothing&wai-extra-3.1.6-Lt5toMQkZR36wfA2h5s2y5Network.Wai.ParseFileInfoNetwork.HTTP.Types.HeaderHeaderRequest text-1.2.3.2Data.Text.InternalText$aeson-1.5.6.0-Lx8Dy5u1bnt72SIbe8dxJ6Data.Aeson.Types.ToJSONToJSONbytestring-0.10.10.0Data.ByteString.Lazy.Internal ByteStringNetwork.HTTP.Types.StatusStatus#cookie-0.4.5-JoyqOkJeahAEddz6P9VUaR Web.CookiedefaultSetCookie SetCookieNetwork.HTTP.Types.Versionhttp20http11http10http09 HttpVersion httpMajor httpMinorNetwork.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 statusCode statusMessagerenderStdMethod renderMethod parseMethod methodPatch methodOptions methodConnect methodTrace methodDelete methodPut methodHead methodPost methodGet StdMethodPATCHOPTIONSCONNECTTRACEDELETEPUTHEADGETPOSTparseByteRangesrenderByteRangesrenderByteRangesBuilderrenderByteRangerenderByteRangeBuilderhCookie hUserAgenthServerhRefererhRange hLocation hLastModifiedhIfRangehIfModifiedSincehDate hContentType hContentMD5hContentLengthhContentEncoding hConnection hCacheControlhAuthorizationhAcceptLanguagehAccept HeaderNameRequestHeadersResponseHeaders ByteRangeByteRangeSuffix ByteRangeFromByteRangeFromTo ByteRanges