= 3      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ (c) 2009 Henning ThielemannBSD experimentalnon-portable (not tested)Safe111(c) 2009 Henning ThielemannBSD experimentalnon-portable (not tested)SafeDOInserts a header with the given name and value. Allows duplicate header names.EEAdds the new header only if no previous header shares the same name.F(Removes old headers with duplicate name.GInserts multiple headers.H)Gets a list of headers with a particular :.JhLookup presence of specific Name in a list of Headers Returns the value from the first matching header.BJoins consecutive lines where the second line begins with ' ' or '\t'.:;<=>?@ABCDEFGHIJKLMNOP6543210/.-,+*)('&%$#"!  987:;<=>?@ABCDEFGHIJKLMNOP987;<:6543210/.-,+*)('&%$#"!  C=>@ABDGEHFJKLMNO?I:;<=>?@ABCDEFGHIJKLMNO Safe(c) 2009 Henning ThielemannBSD experimentalnon-portable (not tested)Safe PQRSTUVWXYZ[PRQSTWUVSTUVWPQRPQRSTUVWXYZ[(c) Henning Thielemann, 2009BSDhttp@henning-thielemann.de experimentalnon-portable (not tested)Safe \]^_`abcdef \]^_`abcdef ba\]^_`cdef\]^_`abcdefSafeghijklghijklihgjklghijklNonemnmnmnmn(c) 2009 Henning ThielemannBSD experimentalnon-portable (not tested)Safe in contrast to built-in (,,)$, its mappend implementation is lazypdReceive and parse a HTTP request from the given Stream. Should be used for server side interactions.!Reads and parses request headers.=Process request body (called after successful getRequestHead)q|Very simple function, send a HTTP response over the given stream. This could be improved on to use different transfer types.3Used when we know exactly how many bytes to expect.Used when nothing about data is known, Unfortunately waiting for a socket closure causes bad behaviour. Here we just take data once and give up the rest.A necessary feature of HTTP/1.1 Also the only transfer variety likely to return any footers. Also the only transfer method for infinite data and the prefered one for generated data.rMaybe in the future we will have a sensible thing to do here, at that time we might want to change the name.CRemove leading crlfs then call readTillEmpty2 (not required by RFC)Read lines until an empty line (CRLF), also accepts a connection close as end of input, which is not an HTTP/1.1 compliant thing to do - so probably indicates an error condition.Read the next line and feed it to an action. If the read line ends with an exception, the subsequent action is not executed. Thus readLine is handled strictly.&opqropqopq opqrSafe tuvwxyz{|}tuvwxyz wtuv}|{xyztuvwxyz{|}None~chunk size, only relevant for _. &dictionary for read and write methods  chunk size ~~~                      ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgGhijklmnopqlmGijkrstuvwxyz{G|rs}~yrs}~   )http-monad-0.1.1.1-EAjdvEbtCciD9IzDlb5SiENetwork.Monad.HTTP.HeaderNetwork.Monad.BodyNetwork.Monad.TransferNetwork.Monad.ReaderNetwork.Monad.Transfer.IONetwork.Monad.HTTPNetwork.Monad.Transfer.Offline#Network.Monad.Transfer.ChunkyLazyIONetwork.Monad.ExceptionNetwork.Monad.Utility$HTTP-4000.3.3-Kl3AocO7k081nCSZCSvInANetwork.HTTP.HeadersHeader HdrCustomHdrContentTransferEncodingHdrLastModified HdrExpiresHdrETagHdrContentTypeHdrContentRange HdrContentMD5HdrContentLocationHdrContentLengthHdrContentLanguageHdrContentEncodingHdrContentBaseHdrAllowHdrWWWAuthenticate HdrWarningHdrVary HdrTrailerHdrTE HdrSetCookie HdrServer HdrRetryAfter HdrPublicHdrProxyAuthenticate HdrLocationHdrAge HdrUserAgent HdrRefererHdrRangeHdrProxyAuthorizationHdrMaxForwardsHdrIfUnmodifiedSince HdrIfRangeHdrIfNoneMatch HdrIfMatchHdrIfModifiedSinceHdrHostHdrFrom HdrExpect HdrCookieHdrAuthorizationHdrAcceptLanguageHdrAcceptEncodingHdrAcceptCharset HdrAcceptHdrVia HdrUpgradeHdrTransferEncoding HdrPragmaHdrDate HdrConnectionHdrCacheControl HeaderName setHeaders getHeaders HasHeadersNameTconsgetNamegetValue dictionarysetManygetMany modifyManyconsNameinsertinsertIfMissingreplace insertMany retrieveMany matchNamefindfindManylookupparse parseManyWarnparseManyStraightCharTypefromChartoCharC fromStringtoString isLineTermisEmpty $fCByteString$fCByteString0$fC[]$fCharTypeCharConsreadLine readBlock writeBlockAsyncExceptionalSyncExceptionalliftSync liftAsync liftIOSync liftIOAsynctransferrunsendreceiverespond$fMonoidChunkedResponse$fShowChunkedResponseBodysplitAt breakAfter withBuffer$fBodyByteString$fBodyByteString0$fBody[]lengthAsyncExceptionalTmapbindappendcontinueswitchswitchM joinExtendedcrlfspChunkedResponsegetRequestHeadprocessRequestlinearTransferhopefulTransferchunkedTransferuglyDeathTransferreadTillEmpty1readTillEmpty2readLineSwitch BehaviourContinueRetryDone ExpectEntity DieHorriblyAsynchronousExceptionalSynchronousExceptionalrequestMethodDictparseRequestHeadparseResponseHead matchResponsesendMaingetResponseHeadwithResponseHeadswitchResponse fixHostHeader findConnCloseuriToAuthorityStringassembleHeaderBodylinearTransferStrLenforceCRchunkedTransferLoopreadBlockChunky