úÎ!»ß¬yW      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVNonestreaming-utilsThe result of a parse (Either a ([String], String)#), with the unconsumed byte stream.O:set -XOverloadedStrings -- the string literal below is a streaming bytestringJ(r,rest1) <- AS.parse (A.scientific <* A.many' A.space) "12.3 4.56 78.3"print r Left 12.3=(s,rest2) <- AS.parse (A.scientific <* A.many' A.space) rest1print s Left 4.56=(t,rest3) <- AS.parse (A.scientific <* A.many' A.space) rest2print t Left 78.3Q.putStrLn rest3 streaming-utilsˆApply a parser repeatedly to a stream of bytes, streaming the parsed values, but ending when the parser fails.or the bytes run out.JS.print $ AS.parsed (A.scientific <* A.many' A.space) $ "12.3 4.56 78.9"12.34.5678.918.282 streaming-utilsAttoparsec parserstreaming-utils Raw input  None2=?SX4–"streaming-utilsAn  attoparsec7 error that happened while parsing the raw JSON string.#streaming-utilsAn aeson0 error that happened while trying to convert a  to an    instance, as reported by  .Wstreaming-utils%An error while decoding a JSON value.$streaming-utilsThis instance allows using   with  and 0 instance Error (DecodingError, Producer a m r)Consecutively parse a elements from the given Producer" using the given parser (such as  or .), skipping any leading whitespace each time.This Producerf runs until it either runs out of input or until a decoding failure occurs, in which case it returns X with a ! and a Producer! with any leftovers. You can use   to turn the Y return value into an  monad transformer.Like , except it accepts any Z instance, not just [ or [.%streaming-utilsVGiven a bytestring, parse a top level json entity - returning any leftover bytes. &streaming-utils`Resolve a succession of top-level json items into a corresponding stream of Haskell values. 'streaming-utils(Experimental. Parse a bytestring with a  json-streamsø parser. The function will read through the whole of a single top level json entity, streaming the valid parses as they arise. (It will thus for example parse an infinite json bytestring, though these are rare in practice ...) ~If the parser is fitted to recognize only one thing, then zero or one item will be yielded; if it uses combinators like arrayOfÿ˜, it will stream many values as they arise. See the example at the top of this module, in which values inside a top level array are emitted as they are parsed. Aeson would accumulate the whole bytestring before declaring on the contents of the array. This of course makes sense, since attempt to parse a json array may end with a bad parse, invalidating the json as a whole. With  json-streamsù, a bad parse will also of course emerge in the end, but only after the initial good parses are streamed. This too makes sense though, but in a smaller range of contexts -- for example, where one is folding over the parsed material.+This function is closely modelled on  and  from Data.JsonStream.Parser.!"#$%&'!"#$%&'NoneU,streaming-utils Send an HTTP \ and wait for an HTTP ]-streaming-utils Create a ^( from a content length and an effectful _.streaming-utils Create a ^ from an effectful _. is more flexible than -C, but requires the server to support chunked transfer encoding./streaming-utilsºThis is a quick method - oleg would call it 'unprofessional' - to bring a web page in view. It sparks its own internal manager and closes itself. Thus something like this makes senseArunResourceT $ Q.putStrLn $ simpleHttp "http://lpaste.net/raw/12"chunk _ [] = [];chunk n xs = let h = take n xs in h : (chunk n (drop n xs))but if you try something like\rest <- runResourceT $ Q.putStrLn $ Q.splitAt 40 $ simpleHTTP "http://lpaste.net/raw/146532"&import Data.ByteString.Streaming.HTTP "it will just be good luck if with runResourceT $ Q.putStrLn restyou get the rest of the file:  ‚import qualified Data.ByteString.Streaming.Char8 as Q main = runResourceT $ Q.putStrLn $ simpleHTTP "http://lpaste.net/raw/146532" rather than  J*** Exception: <socket: 13>: hGetBuf: illegal operation (handle is closed)DSince, of course, the handle was already closed by the first use of  runResourceT6. The same applies of course to the more hygienic ,- above, which permits one to extract an IO (ByteString IO r) , by using splitAt or the like. UThe reaction of some streaming-io libraries was simply to forbid operations like splitAtŽ. That this paternalism was not viewed as simply outrageous is a consequence of the opacity of the older iteratee-io libraries. It is obviousj that I can no more run an effectful bytestring after I have made its effects impossible by using  runResourceT (which basically means closeEverythingDown©). I might as well try to run it after tossing my machine into the flames. Similarly, it is obvious that I cannot read from a handle after I have applied hClose6; there is simply no difference between the two cases.,streaming-utilsstreaming-utilsstreaming-utilsHandler for response¾`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ^ÐÑÒÓÔÕÖר\ÙÚÛÜÝÞßàáâãäåæçè]éêëìíîïðñòóôõö÷øùúûüýþÿ     ,-./0 ,0-./NoneSXeß1streaming-utilsÊReceives bytes from a connected socket with a maximum chunk size. The bytestream ends if the remote peer closes its side of the connection or EOF is received. The implementation is as follows: œfromSocket sock nbytes = loop where loop = do bs <- liftIO (NSB.recv sock nbytes) if B.null bs then return () else Q.chunk bs >> loop2streaming-utilsZConnect a stream of bytes to the remote end. The implementation is again very simple: ”toSocket sock = loop where loop bs = do e <- Q.nextChunk bs case e of Left r -> return r Right (b,rest) -> send sock b >> loop rest1streaming-utilsConnected socket.streaming-utilsXMaximum number of bytes to receive and send dowstream at once. Renzo recommends using 4096% if you don't have a special purpose.2streaming-utilsConnected socket. 1212 NoneSX•î3streaming-utilsConstruct an ordinary pipes  from a  of elements3runEffect $ fromStream (S.each [1..3]) >-> P.print1234streaming-utils Construct a  of elements from a pipes "S.print $ toStream $ P.each [1..3]1235streaming-utilsFLink the chunks of a producer of bytestrings into a single byte stream6streaming-utils7Successively yield the chunks hidden in a byte stream. 7streaming-utils7 splits a  into two  s; the outer b is the longest consecutive group of elements that satisfy the predicate. Its inverse is 8streaming-utils8 splits a  into two  s; the outer _ is the longest consecutive group of elements that fail the predicate. Its inverse is ;streaming-utils; divides a  into two 8s after a fixed number of elements. Its inverse is <streaming-utils< splits a  into two ‡s; the second producer begins where we meet an element that is different according to the equality predicate. Its inverse is =streaming-utilsLike <#, where the equality predicate is ()>streaming-utils> splits a  into a  of %s of equal items. Its inverse is B?streaming-utils groupsBy' splits a  into a  of 7s grouped using the given relation. Its inverse is BThis differs from >h by comparing successive elements instead of comparing each element to the first member of the groupimport Pipes (yield, each)import Pipes.Prelude (toList)let rel c1 c2 = succ c1 == c2E(toList . intercalates (yield '|') . groupsBy' rel) (each "12233345") "12|23|3|345"E(toList . intercalates (yield '|') . groupsBy rel) (each "12233345")"122|3|3|34|5"Astreaming-utilsA splits a  into a  of (s of a given length. Its inverse is B.4let listN n = L.purely P.folds L.list . P.chunksOf nHrunEffect $ listN 3 P.stdinLn >-> P.take 2 >-> P.map unwords >-> P.print1<Enter>2<Enter>3<Enter>"1 2 3"4<Enter>5<Enter>6<Enter>"4 5 6"Blet stylish = P.concats . P.maps (<* P.yield "-*-") . P.chunksOf 2QrunEffect $ stylish (P.each $ words "one two three four five six") >-> P.stdoutLn onetwo-*-threefour-*-fivesix-*-Bstreaming-utilsJoin a stream of s into a single Cstreaming-utils Fold each  in a producer  Vpurely folds :: Monad m => Fold a b -> Stream (Producer a m) m r -> Producer b m rDstreaming-utils Fold each  in a  stream, monadically Zimpurely foldsM :: Monad m => FoldM a b -> Stream (Producer a m) m r -> Producer b m rEstreaming-utils (takes' n) only keeps the first n s of a linked  of  ProducersUnlike , E- is not functor-general - it is aware that a  can be drainedH, as functors cannot generally be. Here, then, we drain the unused Us in order to preserve the return value. This makes it a suitable argument for .Cstreaming-utils Step functionstreaming-utilsInitial accumulatorstreaming-utilsExtraction functionstreaming-utilsDstreaming-utils Step functionstreaming-utilsInitial accumulatorstreaming-utilsExtraction functionstreaming-utils3456789:;<=>?@ABCDE3456A@>?9:BCDE78;=<None¬ Fstreaming-utils#How hard should we try to compress?Gstreaming-utils#Decompress a streaming bytestring.  is from Codec.Compression.Zlib G  ::  m => _ m r -> _ m r Hstreaming-utilsdDecompress a zipped byte stream, returning any leftover input that follows the compressed material.Istreaming-utilsCompress a byte stream.See the Codec.Compression.Zlib module for details about  and .Nstreaming-utils-A specific compression level between 0 and 9.Pstreaming-utils!Decompress a gzipped byte stream.Qstreaming-utilscDecompress a gzipped byte stream, returning any leftover input that follows the compressed stream.Rstreaming-utils*Compress a byte stream in the gzip format.streaming-utilsProduce values from the given  until exhausted.Gstreaming-utilsCompressed streamstreaming-utilsDecompressed streamHstreaming-utilsCompressed byte streamstreaming-utilsBDecompressed byte stream, ending with either leftovers or a resultIstreaming-utilsDecompressed streamstreaming-utilsCompressed streamPstreaming-utilsCompressed streamstreaming-utilsDecompressed streamQstreaming-utilsCompressed byte streamstreaming-utils.Decompressed bytes stream, returning either a _< of the leftover input or the return value from the input _.Rstreaming-utilsDecompressed streamstreaming-utilsCompressed streamFGHIJKLMNOPQRGHIPQRFJKLMNO ! "#$%&'(&')&'*&'+&',&'-&'.&'/&'0&'1&'2&'3&45&46&47&48&49:;<:=>:=?:=@ABCABDABEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€€‚ƒ„…ƒ†‡ˆ‰‡ˆЇˆ‹Œއ‡‘‡’‡“‡”‡•‡–‡—‡˜‡™‡š‡›‡œ‡œž‡œŸ‡œ ‡œ¡‡œ¢‡£¤‡£¥‡£¦‡£§‡£¨‡£©‡£ª‡£«‡£¬‡£­‡£®‡£¯‡£°‡£±‡²³‡²´‡²µ‡²¶‡²·‡²¸‡²¹‡²º‡²»‡²¼‡²½‡²¾‡¿À‡¿Á‡¿Â‡¿Ã‡¿Ä‡¿Å‡¿Æ‡¿Ç‡¿È‡¿É‡¿Ê‡¿Ë‡¿Ì‡¿Í‡¿Î‡¿Ï‡¿Ð‡¿Ñ‡ÒÓ‡ÒÔ‡ÒÕ‡Öׇ֨‡ˆÙ‡ˆÚ‡ˆÛ‡ˆ܇ˆ݇ˆÞ‡ˆ߇ˆà‡ˆᇈ⇈㇈䇈凈懈燈臈釈ꇈ뇈쇈퇈ð‡ˆñ‡ˆò‡ˆó‡ˆô‡ˆô‡ˆõ‡ˆö‡ˆ÷‡ˆø‡ˆù‡ˆú‡ˆû‡ˆü‡ˆý‡ˆþ‡ˆÿ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ ‡ˆ ‡ˆ ‡ˆ ‡ˆ ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆn‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ߇ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ ‡ˆ!‡ˆ"‡ˆ#‡ˆ$‡ˆ%‡ˆ&‡ˆ'‡ˆ(‡ˆ)‡ˆ*‡ˆ+‡ˆ,‡ˆ-‡ˆ.‡ˆ.‡ˆ/‡ˆ0‡ˆ123423523623723823923:23;23<23=23=23>23?23@23A23B23CDEFABGHIJFGKLMNOP Q.streaming-utils-0.2.0.0-BiuodpCmNno37RtpLOXlzyStreaming.Network.TCPData.ByteString.Streaming.HTTPStreaming.Pipes Streaming.Zip$Data.Attoparsec.ByteString.StreamingData.ByteString.Streaming.Aeson Data.AesonValueAFromJSONError Pipes.LifterrorP Pipes.AesondecodeddecodedLdecode parseValueControl.Monad.Trans.ErrorErrorTencodeData.JsonStream.ParserparseByteStringparseLazyByteString Control.MonadjoinZCompressionLevel&network-2.8.0.0-AkCJm1aNSYz7ekXKYyI0pFNetwork.Socket.TypesSocketNetwork.SocketHostName ServiceNameNetwork.Socket.Internal withSocketsDoSockAddr+network-simple-0.4.3-8F36GQIfHS35GOgWTHtffYNetwork.Simple.TCPsendManysendLazysendrecv closeSockbindSock connectSock acceptForkacceptlistenserveconnectNetwork.Simple.InternalHostHostIPv6HostIPv4HostAnyHostPreference&resourcet-1.2.2-6aHFYK7cYsT6IDIL0wEb5UControl.Monad.Trans.Resource runResourceT%Control.Monad.Trans.Resource.Internal liftResourceT MonadResource ResourceT(streaming-0.2.2.0-6BC4Zeul6ZYBVIvxn7NEdFStreaming.Internaltakes intercalatesmaps!zlib-0.6.2-EaJL3b5rwqlHpbnkak0DmpCodec.Compression.Zlib.StreamdefaultWindowBitsMessageparseparsed DecodingErrorAttoparsecError FromJSONError streamParse$fExceptionDecodingError$fShowDecodingError$fEqDecodingError$fDataDecodingErrorwithHTTPstreamNstream simpleHTTPhttp fromSockettoSocket fromStreamtoStreamtoStreamingByteStringfromStreamingByteStringspanbreaksplitbreakssplitAtgroupBygroupgroupsBy groupsBy'groupschunksOfconcatsfoldsfoldsMtakes' decompress decompress'compressdefaultCompression noCompression bestSpeedbestCompressioncompressionLevel windowBitsgunzipgunzip'gzip$fShowCompressionLevel$fReadCompressionLevel$fEqCompressionLevel$fOrdCompressionLevel ParsingErrorbase Data.EitherLeftEither$aeson-1.4.2.0-AJSJFErvuVt75VMZs4WuOEData.Aeson.Types.ToJSONToJSONData.Aeson.Types.Internal(http-client-0.6.1-2pKojrNhF8y5Xjs9G1dI5LNetwork.HTTP.Client.TypesRequestResponse RequestBody1streaming-bytestring-0.1.6-5RhDc26mNewLgrl7cCe1FN"Data.ByteString.Streaming.Internal ByteStringNetwork.HTTP.ClientresponseTimeoutDefaultresponseTimeoutNoneresponseTimeoutMicromanagerSetProxymanagerSetSecureProxymanagerSetInsecureProxywithResponseHistoryresponseOpenHistoryHistoriedResponse hrRedirectshrFinalRequesthrFinalResponseNetwork.HTTP.Client.CorewithConnection responseClose responseOpen httpNoBodyhttpLbs withResponseNetwork.HTTP.Client.CookiesgenerateCookieinsertCheckedCookiereceiveSetCookieupdateCookieJarcomputeCookieStringinsertCookiesIntoRequestevictExpiredCookies!removeExistingCookieFromCookieJardestroyCookieJarcreateCookieJar pathMatches defaultPath domainMatches isIpAddressNetwork.HTTP.Client.Manager defaultProxyproxyEnvironmentNamedproxyEnvironmentuseProxynoProxyproxyFromRequest withManager closeManager newManagerdefaultManagerSettingsrawConnectionModifySocketSizerawConnectionModifySocketNetwork.HTTP.Client.RequestobservedStreamFile streamFilesetQueryStringPartialEscapesetQueryStringsetRequestCheckStatussetRequestIgnoreStatusurlEncodedBodyapplyBasicProxyAuthapplyBasicAuthdefaultRequestgetUrirequestFromURI_requestFromURI parseRequest_ parseRequestthrowErrorStatusCodes parseUrlThrowparseUrlNetwork.HTTP.Client.Body brConsume brReadSomebrReadNetwork.HTTP.Client.ConnectionsocketConnectionmakeConnection BodyReader HttpExceptionHttpExceptionRequestInvalidUrlExceptionHttpExceptionContent InvalidHeaderResponseTimeoutStatusCodeExceptionTooManyRedirectsOverlongHeadersConnectionTimeoutConnectionFailureInvalidStatusLineInvalidRequestHeaderInternalExceptionProxyConnectExceptionNoResponseDataReceivedTlsNotSupportedWrongRequestBodyStreamSizeResponseBodyTooShortInvalidChunkHeadersIncompleteHeadersInvalidDestinationHostHttpZlibExceptionInvalidProxyEnvironmentVariableConnectionClosedInvalidProxySettingsCookie cookie_name cookie_valuecookie_expiry_time cookie_domain cookie_pathcookie_creation_timecookie_last_access_timecookie_persistentcookie_host_onlycookie_secure_onlycookie_http_only CookieJarProxy proxyHost proxyPortRequestBodyLBS RequestBodyBSRequestBodyBuilderRequestBodyStreamRequestBodyStreamChunked RequestBodyIOPopper NeedsPopper GivesPopperpathmethodsecurehostport queryStringrequestHeaders requestBodyproxy redirectCount checkResponseresponseTimeout cookieJarrequestVersionresponseStatusresponseVersionresponseHeaders responseBodyresponseCookieJarManagerSettingsmanagerConnCountmanagerRawConnectionmanagerTlsConnectionmanagerResponseTimeoutmanagerRetryableExceptionmanagerWrapExceptionmanagerIdleConnectionCountmanagerModifyRequestmanagerModifyResponse ProxyOverrideManagerHasHttpManagergetHttpManagerStreamFileStatusfileSize readSoFar thisChunkSize.http-client-tls-0.3.5.3-HvatjhEhwPNL9tek0e5U2cNetwork.HTTP.Client.TLSapplyDigestAuthdisplayDigestAuthExceptionsetGlobalManagergetGlobalManagernewTlsManagerWith newTlsManagertlsManagerSettingsmkManagerSettingsContextmkManagerSettingsDigestAuthExceptionDigestAuthExceptionDetailsUnexpectedStatusCodeMissingWWWAuthenticateHeaderWWWAuthenticateIsNotDigest MissingRealm MissingNonce"pipes-4.3.9-KVXB9KNNvp2DBvV2SPz6LI Pipes.CoreProducerStreamghc-prim GHC.Classes== WindowBitsControl.Monad.IO.ClassMonadIO fromPopper0streaming-commons-0.2.1.0-BN9scrYOHr84cRO2v2hI1EData.Streaming.Zlib