úÎ73¬?      !"#$%&'()*+,-./0123456789:;<=>?KMiddleware is a component that sits between the server and application. It M can do such tasks as GZIP encoding or response caching. What follows is the J general definition of middleware, though a middleware author should feel  free to modify this. GAs an example of an alternate type for middleware, suppose you write a N function to load up session information. The session information is simply a  string map [(String, String)]0. A logical type signatures for this middleware  might be:  " loadSession :: ([(String, String)] -> Application) -> Application#Here, instead of taking a standard  as its first argument, the M middleware takes a function which consumes the session information as well. GInformation on the request sent by the client. This abstracts away the + details of the underlying implementation.  GExtra path information sent by the client. The meaning varies slightly K depending on backend; in a standalone server setting, this is most likely L all information after the domain name. In a CGI application, this would be B the information following the path to the CGI executable itself. 8If no query string was specified, this should be empty. .Was this request made over an SSL connection? ?Log the given line in some method; how this is accomplished is  server-dependant.  The client's host information. KHTTP status code; a combination of the integral code and a status message. B Equality is determined solely on the basis of the integral code. @Headers sent from the server to the client. Note that this is a 6 case-insensitive string, as the HTTP spec specifies. @Headers sent from the client to the server. Note that this is a 6 case-insensitive string, as the HTTP spec specifies. )A case insensitive bytestring, where the ? and @ instances do N comparisons based on the lower-cased version of this string. For efficiency, H this datatype contains both the original and lower-case version of the L string; this means there is no need to lower-case the bytestring for every  comparison. &Please note that this datatype has an A instance, which can allow L for very concise code when using the OverloadedStrings language extension. GVersion of HTTP protocol used in current request. The value given here $ should be everything following the "HTTP/" line in a request. In other  words, HTTP/1.1 -> "1.1", HTTP/1.0 -> "1.0". FHTTP request method. Since the HTTP protocol allows arbitrary request " methods, we leave this open as a B. Please note the request  methods are case-sensitive. !HTTP/0.9 "HTTP/1.0 #HTTP/1.1 $?Convert a regular bytestring to a case-insensitive bytestring. %&OK '(Created )*Partial Content +,Moved Permanently -.Found /0 See Other 12 Bad Request 34 Unauthorized 56 Forbidden 78 Not Found 9:Method Not Allowed ;<Internal Server Error =>?  !"#$%&'()*+,-./0123456789:;<=>? !"#$%&'()*+,-./0123456789:;< =>?    !"#$%&'()*+,-./0123456789:;<=>C      !"#$%&'()*+,-./0123456789:;<=>?=>@=ABCDEF wai-0.3.2 Network.Wai Middleware ApplicationResponseEnumeratorResponseResponseBuilder ResponseFileRequest requestMethod httpVersionpathInfo queryString serverName serverPortrequestHeadersisSecure errorHandler remoteHostStatus statusCode statusMessageResponseHeadersResponseHeaderRequestHeaders RequestHeader CIByteString ciOriginal ciLowerCase HttpVersionMethodhttp09http10http11mkCIByteString status200statusOK status201 statusCreated status206statusPartialContent status301statusMovedPermanently status302 statusFound status303statusSeeOther status400statusBadRequest status401statusUnauthorized status403statusForbidden status404statusNotFound status405statusNotAllowed status500statusServerErrorresponseEnumerator responseLBSbase GHC.ClassesEqOrd Data.StringIsStringbytestring-0.9.1.10Data.ByteString.Internal ByteString