X      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NAn exception originating within the FastCGI infrastructure or the web server. KAn exception thrown by operations which are given cookie names that do not - meet the appropriate syntax requirements. IAn exception thrown by operations which are given a header that does not 8 meet their requirement of being valid in a response. GAn exception thrown by operations which produce output when output has  been closed, as by v. IAn exception thrown by operations which require the response headers not  to have been sent yet. Headers are classified by HTTP/-1.1 as request headers, response headers, or  entity headers. Nonstandard headers Entity headers Response headers  !"#$%&'()*+,-./Request headers 0OThe class of monads within which the FastCGI calls are valid. You may wish to 2 create your own monad implementing this class. 1Returns the opaque A& object representing the state of the  FastCGI client. I Should not be called directly by user code, except implementations of  0; exported so that , user monads can implement the interface. 2"Throws an exception in the monad. @ Should not be called directly by user code; exported so that 1 user monads can implement the interface. See x. The exception to throw 3MPerform an action in the monad, with a given exception-handler action bound. @ Should not be called directly by user code; exported so that 1 user monads can implement the interface. See y. ?The action to run with the exception handler binding in scope. The exception handler to bind. 4#Block exceptions within an action. @ Should not be called directly by user code; exported so that 1 user monads can implement the interface. See z. +The action to run with exceptions blocked. 5%Unblock exceptions within an action. @ Should not be called directly by user code; exported so that 1 user monads can implement the interface. See {. -The action to run with exceptions unblocked. 6NThe monad within which each single connection from the web server is handled. 789:;<=>?@ARAn opaque type representing the state of a single connection from the web server. B#Takes a forking primitive, such as  or , and a handler, and Q concurrently accepts requests from the web server, forking with the primitive < and invoking the handler in the forked thread inside the 6 monad for each  one. QIt is valid to use a custom forking primitive, such as one that attempts to pool U OS threads, but the primitive must actually provide concurrency - otherwise there K will be a deadlock. There is no support for single-threaded operation. QNote that although there is no mechanism to substitute another type of monad for U FastCGI, you can enter your own monad within the handler, much as you would enter ? your own monad within IO. You simply have to implement the 0 class. ;Any exceptions not caught within the handler are caught by concurrentAcceptLoop, J and cause the termination of that handler, but not of the accept loop. O Furthermore, the exception is logged through the FastCGI protocol if at all  possible. QIn the event that the program was not invoked according to the FastCGI protocol,  returns. &A forking primitive, typically either  or . >A handler which is invoked once for each incoming connection. Never actually returns. C#Logs a message using the web server's logging facility. D0Queries the value from the web server of the CGI/1.1 request variable with the  given name for this request. +The name of the request variable to query. 5The value of the request variable, if the web server  provided one. E>Returns an association list of name-value pairs of all the CGI/ 1.1 request " variables from the web server. F7Queries the value from the user agent of the given HTTP/ 1.1 header. :The header to query. Must be a request or entity header. 9The value of the header, if the user agent provided one. G?Returns an association list of name-value pairs of all the HTTP/1.1 request or ' entity headers from the user agent. H Returns a 87; object for the given name, if the user agent provided one  in accordance with RFC 2109. $The name of the cookie to look for. +The cookie, if the user agent provided it. I Returns all 873 objects provided by the user agent in accordance  RFC 2109. JA convenience method; as H+, but returns only the value of the cookie  rather than a 87 object. $The name of the cookie to look for. 8The value of the cookie, if the user agent provided it. KMReturn the document root, as provided by the web server, if it was provided. LQReturn the gateway interface, as provided by the web server, if it was provided. MIReturn the path info, as provided by the web server, if it was provided. NUReturn the path-translated value, as provided by the web server, if it was provided. OLReturn the query string, as provided by the web server, if it was provided. POReturn the redirect status, as provided by the web server, if it was provided. QLReturn the redirect URI, as provided by the web server, if it was provided. RNReturn the remote address, as provided by the web server, if it was provided. SKReturn the remote port, as provided by the web server, if it was provided. TOReturn the remote hostname, as provided by the web server, if it was provided. URReturn the remote ident value, as provided by the web server, if it was provided. VPReturn the remote user name, as provided by the web server, if it was provided. WNReturn the request method, as provided by the web server, if it was provided. XKReturn the request URI, as provided by the web server, if it was provided. YOReturn the script filename, as provided by the web server, if it was provided. ZKReturn the script name, as provided by the web server, if it was provided. [NReturn the server address, as provided by the web server, if it was provided. \KReturn the server name, as provided by the web server, if it was provided. ]KReturn the server port, as provided by the web server, if it was provided. ^OReturn the server protocol, as provided by the web server, if it was provided. _OReturn the server software name and version, as provided by the web server, if  it was provided. `SReturn the authentication type, as provided by the web server, if it was provided. aNReturn the content length, as provided by the web server, if it was provided. bLReturn the content type, as provided by the web server, if it was provided. cUReads up to a specified amount of data from the input stream of the current request, T and interprets it as binary data. This is the content data of the HTTP request, T if any. If input has been closed, returns an empty bytestring. If insufficient Q input is available, blocks until there is enough. If output has been closed,  causes an  exception. dTReads up to a specified amount of data from the input stream of the curent request, T and interprets it as binary data. This is the content data of the HTTP request, T if any. If input has been closed, returns an empty bytestring. If insufficient U input is available, returns any input which is immediately available, or an empty V bytestring if there is none, never blocking. If output has been closed, causes an   exception. eKReads all remaining data from the input stream of the current request, and S interprets it as binary data. This is the content data of the HTTP request, if U any. Blocks until all input has been read. If input has been closed, returns an ; empty bytestring. If output has been closed, causes an   exception. fMReturns whether the input stream of the current request potentially has data S remaining, either in the buffer or yet to be read. This is the content data of  the HTTP request, if any. gOSets the response status which will be sent with the response headers. If the 5 response headers have already been sent, causes a   exception. The HTTP/1.1 status code to set. hMReturns the response status which will be or has been sent with the response  headers. The HTTP/1.1 status code. iSets the given  HttpHeader7 response header to the given string value, overriding R any value which has previously been set. If the response headers have already  been sent, causes a " exception. If the header is not  an HTTP/H1.1 or extension response or entity header, ie, is not valid as part of  a response, causes a  exception. If a value is set for the ( header, this overrides all cookies set  for this request with l. CThe header to set. Must be a response header or an entity header. The value to set. jCauses the given  HttpHeader6 response header not to be sent, overriding any value S which has previously been set. If the response headers have already been sent,  causes a ) exception. If the header is not an HTTP/1.1 S or extension response or entity header, ie, is not valid as part of a response,  causes a  exception. Does not prevent the - header from being sent if cookies have been  set for this request with l. EThe header to unset. Must be a response header or an entity header. kNReturns the value of the given header which will be or has been sent with the 2 response headers. If the header is not an HTTP/$1.1 or extension response or entity < header, ie, is not valid as part of a response, causes a   exception. =The header to query. Must be a response header or an entity  header. !The value of the queried header. lNCauses the user agent to record the given cookie and send it back with future T loads of this page. Does not take effect instantly, but rather when headers are 7 sent. Cookies are set in accordance with RFC 2109.  If an  HttpCookie- header is set for this request by a call to i,  this function has no effect. 3 If the response headers have already been sent,  causes a  exception. = If the name is not a possible name for a cookie, causes a   exception. The cookie to set. mKCauses the user agent to unset any cookie applicable to this page with the R given name. Does not take effect instantly, but rather when headers are sent.  If an  HttpCookie- header is set for this request by a call to i,  this function has no effect. 3 If the response headers have already been sent,  causes a  exception. = If the name is not a possible name for a cookie, causes a   exception. !The name of the cookie to unset. nIConstructs a cookie with the given name and value. Version is set to 1; , path, domain, and maximum age are set to Nothing; and the secure flag is  set to False>. Constructing the cookie does not cause it to be set; to do  that, call l on it. %The name of the cookie to construct. &The value of the cookie to construct. (A cookie with the given name and value. oEConstructs a cookie with the given parameters. Version is set to 1. I Constructing the cookie does not cause it to be set; to do that, call l  on it. %The name of the cookie to construct. &The value of the cookie to construct. %The path of the cookie to construct. 'The domain of the cookie to construct. 8The maximum age of the cookie to construct, in seconds. 3Whether to flag the cookie to construct as secure. $A cookie with the given parameters. p Sets the HTTP/&1.1 return status to 301 and sets the  header to Q the provided URL. This has the effect of issuing a permanent redirect to the R user agent. Permanent redirects, as opposed to temporary redirects, may cause T bookmarks or incoming links to be updated. If the response headers have already  been sent, causes a  exception. %The URL to redirect to, as a string. q Sets the HTTP/&1.1 return status to 303 and sets the  header to D the provided URL. This has the effect of issuing a see-other or  temporary X redirect to the user agent. Temporary redirects, as opposed to permanent redirects, T do not cause bookmarks or incoming links to be updated. If the response headers $ have already been sent, causes a  exception. %The URL to redirect to, as a string. rREnsures that the response headers have been sent. If they are already sent, does : nothing. If output has already been closed, causes an   exception. s5Returns whether the response headers have been sent. tMSends data. This is the content data of the HTTP response. If the response U headers have not been sent, first sends them. If output has already been closed,  causes an  exception. uNSends text, encoded as UTF-8. This is the content data of the HTTP response. P if the response headers have not been sent, first sends them. If output has " already been closed, causes an  exception. vNInforms the web server and the user agent that the request has completed. As R a side-effect, any unread input is discarded and no more can be read. This is P implicitly called, if it has not already been, after the handler returns; it S may be useful within a handler if the handler wishes to return results and then S perform time-consuming computations before exiting. If output has already been  closed, causes an  exception. wNReturns whether it is possible to write more data; ie, whether output has not  yet been closed as by v. xThrow an exception in any 0 monad. The exception to throw. yEPerform an action, with a given exception-handler action bound. See  Control.Exception.catch7. The type of exception to catch is determined by the " type signature of the handler. ?The action to run with the exception handler binding in scope. The exception handler to bind. z<Block exceptions within an action, as per the discussion in Control.Exception. +The action to run with exceptions blocked. {>Unblock exceptions within an action, as per the discussion in Control.Exception. -The action to run with exceptions unblocked. |UAcquire a resource, perform computation with it, and release it; see the description  of Control.Exception.bracket5. If an exception is raised during the computation,  |H will re-raise it after running the release function, having the effect ; of propagating the exception further up the call stack. $The action to acquire the resource. $The action to release the resource. *The action to perform using the resource. (The return value of the perform-action. }HPerform an action, with a cleanup action bound to always occur; see the  description of Control.Exception.finally(. If an exception is raised during the  computation, }; will re-raise it after running the cleanup action, having M the effect of propagating the exception further up the call stack. If no T exception is raised, the cleanup action will be invoked after the main action is  performed. The action to perform. The cleanup action. (The return value of the perform-action. ~OPerform an action. If any exceptions of the appropriate type occur within the  action, return   exception; otherwise, return  result. The action to perform. As y-, but with the arguments in the other order. The exception handler to bind. ?The action to run with the exception handler binding in scope. TPerform an action, with a cleanup action bound to occur if and only if an exception 7 is raised during the action; see the description of Control.Exception.finally. 5 If an exception is raised during the computation, } will re-raise it T after running the cleanup action, having the effect of propagating the exception V further up the call stack. If no exception is raised, the cleanup action will not  be invoked. The action to perform. The cleanup action. (The return value of the perform-action.   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~6A012345BCDE/.-,+*)('&%$#"!  FG789:;<=>?@HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~*/.-,+*)('&%$#"!    !"#$%&'()*+,-./0123451234567 89:;<=>?@89:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./01234567899:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Bdirect-fastcgi-1.0.1.1Network.FastCGIFastCGIExceptionCookieNameInvalidNotAResponseHeaderOutputAlreadyClosedResponseHeadersAlreadySentHeader HttpSetCookie HttpCookieHttpConnectionHttpExtensionHeaderHttpLastModified HttpExpiresHttpContentTypeHttpContentRangeHttpContentMD5HttpContentLocationHttpContentLengthHttpContentLanguageHttpContentEncoding HttpAllowHttpWWWAuthenticateHttpVary HttpServerHttpRetryAfterHttpProxyAuthenticate HttpLocationHttpETagHttpAgeHttpAcceptRanges HttpUserAgentHttpTE HttpReferer HttpRangeHttpProxyAuthorizationHttpMaxForwardsHttpIfUnmodifiedSince HttpIfRangeHttpIfNoneMatchHttpIfModifiedSince HttpIfMatchHttpHostHttpFrom HttpExpectHttpAuthorizationHttpAcceptLanguageHttpAcceptEncodingHttpAcceptCharset HttpAccept MonadFastCGIgetFastCGIStateimplementationThrowFastCGIimplementationCatchFastCGIimplementationBlockFastCGIimplementationUnblockFastCGIFastCGICookie cookieName cookieValue cookieVersion cookiePath cookieDomain cookieMaxAge cookieSecure cookieComment FastCGIState acceptLoopfLoggetRequestVariablegetAllRequestVariablesgetRequestHeadergetAllRequestHeaders getCookie getAllCookiesgetCookieValuegetDocumentRootgetGatewayInterface getPathInfogetPathTranslatedgetQueryStringgetRedirectStatusgetRedirectURIgetRemoteAddress getRemotePort getRemoteHostgetRemoteIdent getRemoteUsergetRequestMethod getRequestURIgetScriptFilename getScriptNamegetServerAddress getServerName getServerPortgetServerProtocolgetServerSoftwaregetAuthenticationTypegetContentLengthgetContentTypefGetfGetNonBlocking fGetContents fIsReadablesetResponseStatusgetResponseStatussetResponseHeaderunsetResponseHeadergetResponseHeader setCookie unsetCookiemkSimpleCookiemkCookiepermanentRedirectseeOtherRedirectsendResponseHeadersresponseHeadersSentfPutfPutStr fCloseOutput fIsWritablefThrowfCatchfBlockfUnblockfBracketfFinallyfTryfHandle fOnException HeaderType EntityHeaderResponseHeader RequestHeader RecordType OtherRecordUnknownTypeRecordGetValuesResultRecordGetValuesRecord DataRecord StderrRecord StdoutRecord StdinRecord ParamsRecordEndRequestRecordAbortRequestRecordBeginRequestRecordRecord recordTyperecordRequestID recordContentRequest requestIDrequestChannelparamsStreamBufferMVarstdinStreamBufferMVarstdinStreamClosedMVarrequestEndedMVarrequestVariableMapMVarrequestHeaderMapMVarrequestCookieMapMVarresponseStatusMVarresponseHeaderMapMVarresponseHeadersSentMVarresponseCookieMapMVarwebServerAddressessocketpeerrequestChannelMapMVarrequestbase GHC.Conc.SyncforkIOControl.ConcurrentforkOScreateListenSocketcomputeWebServerAddressesvalidateWebServerAddressoutsideRequestLoopinsideRequestLoopprocessRequestVariableprocessRequestHeaderprocessCookies parseCookies printCookiesparseInt recvRecord sendRecordrecvAll takeLengthtakeNameValuePair headerType fromHeadertoHeaderrequestVariableNameIsHeaderrequestVariableNameToHeaderNamerequestVariableNameToHeaderisValidInResponsefGet'extendStdinStreamBufferToLength mkUnsetCookierequireValidCookieName sendBufferterminateRequest requireResponseHeadersNotYetSentrequireOutputNotYetClosed Data.EitherLeftRight