\^      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]portable to Hugs and GHC experimental%Lennart Kolmodin <kolmodin@gmail.com> TrustworthyA # is an efficient way to build lazy ^s. . There are several functions for constructing s, but only one G to inspect them: to extract any data, you have to turn them into lazy  ^s using . Internally, a  constructs a lazy   by filling byte 9 arrays piece by piece. As each buffer is filled, it is 'popped' 2 off, to become a new chunk of the resulting lazy ^. ) All this is hidden from the user of the . O(1). The empty Builder, satisfying    = _O(1)., A Builder taking a single byte, satisfying   ( b) = ` bO(1).= The concatenation of two Builders, an associative operation  with identity  , satisfying   ( x y) = a ( x) ( y)O(1). A Builder taking a b , satisfying   ( bs) = c [bs]O(1). A Builder taking a lazy ^ , satisfying   ( bs) = bsO(n). Extract a lazy ^ from a . D The construction work takes place if and when the relevant part of  the lazy ^ is demanded. O(1). Pop the b% we have constructed so far, if any, ) yielding a new chunk in the result lazy ^. d'Sequence an IO operation on the buffer eGet the size of the buffer f'Map the resulting list of bytestrings. gEnsure that there are at least n many bytes available.  Ensure that n# bytes are available, and then use f to write at  most n bytes into memory. f" must return the actual number of  bytes written.  Ensure that n# bytes are available, and then use f to write  exactly n bytes into memory. $Write a Word16 in big endian format 'Write a Word16 in little endian format $Write a Word32 in big endian format 'Write a Word32 in little endian format $Write a Word64 in big endian format 'Write a Word64 in little endian format O(1).< A Builder taking a single native machine word. The word is = written in host order, host endian form, for the machine you're on. G On a 64 bit machine the Word is an 8 byte value, on a 32 bit machine, 6 4 bytes. Values written this way are not portable to > different endian or word sized machines, without conversion. 9Write a Word16 in native host order and host endianness. % 2 bytes will be written, unaligned. 9Write a Word32 in native host order and host endianness. % 4 bytes will be written, unaligned. %Write a Word64 in native host order. J On a 32 bit machine we write two host order Word32s, in big endian form. % 8 bytes will be written, unaligned. (Write a character using UTF-8 encoding. 'hijkldefg mn opqrstu $hijkldefg mn opqrstuportable to Hugs and GHC experimental%Lennart Kolmodin <kolmodin@gmail.com> Trustworthy  None A decoder procuced by running a  monad. =The decoder needs to know the current position in the input. > Given the number of bytes remaning in the decoder, the outer 4 decoder runner needs to calculate the position and  resume the decoding. 6The decoder has successfully finished. Except for the - output value you also get the unused input. 7The decoder has consumed the available input and needs  more to continue. Provide v if more input is available  and w# otherwise, and you will get a new . 7The decoder ran into an error. The decoder either used  x# or was not provided enough input. Run a  monad. See % for what to do next, like providing > input, handling decoding errors and to get the output value. yMake sure we don'+t have to pass Nothing to a Partial twice.  This way we don'8t need to pass around an EOF value in the Get monad, it . can safely ask several times if it needs to. 2Get the total number of bytes read to this point. ,Demand more input. If none available, fail.  Skip ahead n bytes. Fails if fewer than n bytes are available. FTest whether all input has been consumed, i.e. there are no remaining  undecoded bytes. !DEPRECATED. Same as #. zHTry to execute a Get. If it fails, the consumed input will be restored. "8DEPRECATED. Get the number of bytes of remaining input. M Note that this is an expensive function to use as in order to calculate how B much input remains, all input has to be read and kept in-memory. N The decoder keeps the input as a strict bytestring, so you are likely better 8 off by calculating the remaining input in another way. #DAn efficient get method for strict ByteStrings. Fails if fewer than n ! bytes are left in the input. If n <= 0$ then the empty string is returned. $Get the current chunk. %Replace the current chunk. &Return at least n4 bytes, maybe more. If not enough data is available " the computation will escape with . 'Ensure that there are at least n bytes available. If not, the  computation will escape with . %{|}~y !z"#$%&'( !"#$%&'(&($%'"! #{|}~y !z"#$%&'(portable to Hugs and GHC experimental%Lennart Kolmodin <kolmodin@gmail.com>Safe   portable to Hugs and GHC. experimental%Lennart Kolmodin <kolmodin@gmail.com> Trustworthy) A decoder procuced by running a  monad. *6The decoder has successfully finished. Except for the ; output value you also get the unused input as well as the  count of used bytes. +7The decoder has consumed the available input and needs  more to continue. Provide v if more input is available  and w# otherwise, and you will get a new ). ,7The decoder ran into an error. The decoder either used  x# or was not provided enough input. -Run a  monad. See )% for what to do next, like providing = input, handling decoder errors and to get the output value.  Hint: Use the helper functions 0, 1 and  2. .KDEPRECATED. Provides compatibility with previous versions of this library.  Run a , monad and return a tuple with thee values. L The first value is the result of the decoder. The second and third are the 1 unused input, and the number of consumed bytes. / The simplest interface to run a # decoder. If the decoder runs into  an error, calling x' or running out of input, it will call . 0Feed a ) with more input. If the ) is * or , it  will add the input to b of unconsumed input.    runGetPartial myParser ` pushChunk` myInput1 ` pushChunk` myInput2 1Feed a ) with more input. If the ) is * or , it -- will add the input to  ByteString of unconsumed input.    runGetPartial myParser ` pushChunks` myLazyByteString 2Tell a )* that there is no more input. This passes w to a  +3 decoder, otherwise returns the decoder unchanged. 3BAn efficient get method for lazy ByteStrings. Fails if fewer than n  bytes are left in the input. 4:Get a lazy ByteString that is terminated with a NUL byte. : The returned string does not contain the NUL byte. Fails 7 if it reaches the end of input without finding a NUL. 5.Get the remaining bytes as a lazy ByteString. I Note that this can be an expensive function to use as it forces reading - all input and keeping the string in-memory. 6"Read a Word8 from the monad state 7#Read a Word16 in big endian format 8&Read a Word16 in little endian format 9#Read a Word32 in big endian format :&Read a Word32 in little endian format ;#Read a Word64 in big endian format <&Read a Word64 in little endian format =O(1).8 Read a single native machine word. The word is read in 2 host order, host endian form, for the machine you're on. On a 64 bit D machine the Word is an 8 byte value, on a 32 bit machine, 4 bytes. >O(1).@ Read a 2 byte Word16 in native host order and host endianness. ?O(1).9 Read a Word32 in native host order and host endianness. @O(1).8 Read a Word64 in native host order and host endianess. #)*+,-./0123456789:;<=>?@ !"#)*+,-./0123456789:;<=>?@/.),+*-012 #345679;8:<=>?@"! ),+*-./0123456789:;<=>?@(Portable to Hugs and GHC. Requires MPTCsstable%Lennart Kolmodin <kolmodin@gmail.com> TrustworthyA=Put merely lifts Builder into a Writer monad, applied to (). BAThe PutM type. A Writer monad over the efficient Builder monoid. FRun the A monad GRun the A monad with a serialiser HRun the A, monad with a serialiser and get its result IBPop the ByteString we have constructed so far, if any, yielding a % new chunk in the result ByteString. J0Efficiently write a byte into the output buffer KLAn efficient primitive to write a strict ByteString into the output buffer. J It flushes the current buffer, and writes the argument into a new chunk. L?Write a lazy ByteString efficiently, simply appending the lazy ( ByteString chunks to the output buffer M$Write a Word16 in big endian format N'Write a Word16 in little endian format O$Write a Word32 in big endian format P'Write a Word32 in little endian format Q$Write a Word64 in big endian format R'Write a Word64 in little endian format SO(1).1 Write a single native machine word. The word is = written in host order, host endian form, for the machine you're on. G On a 64 bit machine the Word is an 8 byte value, on a 32 bit machine, 6 4 bytes. Values written this way are not portable to > different endian or word sized machines, without conversion. TO(1).: Write a Word16 in native host order and host endianness.  For portability issues see  putWordhost. UO(1).: Write a Word32 in native host order and host endianness.  For portability issues see  putWordhost. VO(1).% Write a Word64 in native host order J On a 32 bit machine we write two host order Word32s, in big endian form.  For portability issues see  putWordhost. ABCDEFGHIJKLMNOPQRSTUVABCDEFGHIJKLMNOPQRSTUVABCDGHEFIJKLMOQNPRSTUVABCDEFGHIJKLMNOPQRSTUVFportable to Hugs and GHC. Requires the FFI and some flexible instancesunstable%Lennart Kolmodin <kolmodin@gmail.com> TrustworthyWThe Binary class provides X and Y, methods to encode and F decode a Haskell value to a lazy ByteString. It mirrors the Read and B Show classes for textual representation of Haskell types, and is D suitable for serialising Haskell values to disk, over the network. CFor decoding and generating simple external binary formats (e.g. C A structures), Binary may be used, but in general is not suitable ? for complex protocols. Instead use the Put and Get primitives  directly. ;Instances of Binary should satisfy the following property:   decode . encode == id  That is, the Y and X' methods should be the inverse of each D other. A range of instances are provided for basic Haskell types. X!Encode a value in the Put monad. Y Decode a value in the Get monad Z@Encode a value using binary serialisation to a lazy ByteString. [NDecode a value from a lazy ByteString, reconstructing the original structure. \#Lazily serialise a value to a file 'This is just a convenience function, it's defined simply as:  ' encodeFile f = B.writeFile f . encode ASo for example if you wanted to compress as well, you could use: # B.writeFile f . compress . encode ]9Lazily reconstruct a value previously written to a file. 'This is just a convenience function, it's defined simply as:  1 decodeFile f = return . decode =<< B.readFile f CSo for example if you wanted to decompress as well, you could use:  / return . decode . decompress =<< B.readFile f 0After contructing the data from the input file, ] checks F if the file is empty, and in doing so will force the associated file B handle closed, if it is indeed empty. If the file is not empty, D it is up to the decoding instance to consume the rest of the data, % or otherwise finalise the resource. ' getMany n' get n/ elements in order, without blowing the stack. 3WXYZ[\]6AJWXYZ[\] WXYAJ6Z[\]1WXYZ[\]     !"#$%&'()*+,-./012!#$%&3456789:;<=>?@ABCDEFGFHIJKLMNOP/.QRSTUVWUX UX UX UYWUXZ[\]^__ `abcdefghijklmklnkopqrstuvwxyz{|}~kkkkkbinary-0.6.1.0Data.Binary.BuilderData.Binary.Builder.InternalData.Binary.Get.InternalData.Binary.GetData.Binary.Put Data.BinaryData.Binary.Builder.BaseL BytestringBuilderempty singletonappendfromByteStringfromLazyByteStringtoLazyByteStringflush writeAtMostwriteN putWord16be putWord16le putWord32be putWord32le putWord64be putWord64le putWordhost putWord16host putWord32host putWord64host putCharUtf8GetrunContDecoder BytesReadDonePartialFailrunGetIncremental bytesRead demandInputskipisEmptygetBytes remaining getByteStringgetputreadNensureN readNWith runGetStaterunGet pushChunk pushChunkspushEndOfInputgetLazyByteStringgetLazyByteStringNulgetRemainingLazyByteStringgetWord8 getWord16be getWord16le getWord32be getWord32le getWord64be getWord64le getWordhost getWord16host getWord32host getWord64hostPutPutMunPut putBuilderexecPutrunPutrunPutMputWord8 putByteStringputLazyByteStringBinaryencodedecode encodeFile decodeFilebytestring-0.10.0.0Data.ByteString.Lazy.Internal ByteStringData.ByteString.LazyData.ByteString.Internal fromChunks withBufferwithSize mapBuilder ensureFreeBuffer runBuilder defaultSize writeBuffer newBufferord2ord3ord4 shiftr_w16 shiftr_w32 shiftr_w64$fMonoidBuilderbase Data.MaybeJustNothingGHC.Basefail noMeansNotrySuccessCreturnGbindGfailGapGfmapGprompt unsafeReadN$fAlternativeGet $fShowDecoder$fFunctorDecoder $fFunctorGet$fApplicativeGet $fMonadGetGHC.ErrerrorcalculateOffsetgetPtrword16beword16leword32beword32leword64beword64le shiftl_w16 shiftl_w32 shiftl_w64PairSsndStell $fMonadPutM$fApplicativePutM $fFunctorPutMgetManySmallIntunrollroll$fBinaryUArray $fBinaryArray $fBinaryTree $fBinaryFloat$fBinaryDouble $fBinarySeq$fBinaryIntMap$fBinaryIntSet $fBinaryMap $fBinarySet$fBinaryByteString$fBinaryByteString0$fBinaryEither $fBinaryMaybe $fBinary[]$fBinary(,,,,,,,,,)$fBinary(,,,,,,,,)$fBinary(,,,,,,,)$fBinary(,,,,,,)$fBinary(,,,,,)$fBinary(,,,,) $fBinary(,,,) $fBinary(,,) $fBinary(,) $fBinaryChar $fBinaryRatio$fBinaryInteger $fBinaryInt $fBinaryWord $fBinaryInt64 $fBinaryInt32 $fBinaryInt16 $fBinaryInt8$fBinaryWord64$fBinaryWord32$fBinaryWord16 $fBinaryWord8$fBinaryOrdering $fBinaryBool $fBinary()ghc-prim GHC.TypesWordGHC.WordWord8Word16Word32Word64