U      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTPortable Experimental-George Giorgidze <http://cs.nott.ac.uk/~ggg/>UVWVWVWPortable experimental-George Giorgidze <http://cs.nott.ac.uk/~ggg/>/XYA # is an efficient way to build lazy Zs. . 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  Zs using . Internally, a  constructs a lazy  L.Bytestring 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 Z. ) 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) = _ ( x) ( y)O(1). A Builder taking a ` , satisfying   ( bs) = a [bs]O(1). A Builder taking a lazy Z , satisfying   ( bs) = bsO(n). Extract a lazy Z from a . D The construction work takes place if and when the relevant part of  the lazy Z is demanded. O(1). Pop the `% we have constructed so far, if any, ) yielding a new chunk in the result lazy Z. bc'Sequence an IO operation on the buffer dGet the size of the buffer e'Map the resulting list of bytestrings. fEnsure that there are at least n many bytes available. g Ensure that n( many bytes are available, and then use f to write some  bytes into the memory. hij Ensure that n( many bytes are available, and then use f to write some " storable values into the memory. k $Write a Word16 in big endian format 'Write a Word16 in little endian format AWrite a 24 bit number in big endian format represented as Word32 DWrite a 24 bit number in little endian format represented as Word32 $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. lm    Portable experimental-George Giorgidze <http://cs.nott.ac.uk/~ggg/>MIThe Get monad is just a State monad carrying around the input ByteString nopThe parse state qrstu Run the Get monad applies a r&-based parser on the input ByteString !Run the Get monad applies a r-based parser on the input F ByteString. Additional to the result of get it returns the number of + consumed bytes and the rest of the input. "# Skip ahead n bytes. Fails if fewer than n bytes are available. $Run ga*, but return without consuming its input.  Fails if ga fails. %Like $, but consume the input if gma returns 'Just _'.  Fails if gma fails. &Like $, but consume the input if gea returns 'Right _'.  Fails if gea fails. '()*+2Get the total number of bytes read to this point. ,,Get the number of remaining unparsed bytes. : Useful for checking whether all input has been consumed. . Note that this forces the rest of the input. -*Test whether all input has been consumed, - i.e. there are no remaining unparsed bytes. . An efficient r/ method for strict ByteStrings. Fails if fewer  than n bytes are left in the input. / An efficient r: method for lazy ByteStrings. Does not fail if fewer than  n bytes are left in the input. 0@Get a lazy ByteString that is terminated with a NUL byte. Fails 7 if it reaches the end of input without hitting a NUL. 1-Get the remaining bytes as a lazy ByteString 2Pull n/ bytes from the input, as a strict ByteString. vwBSplit a ByteString. If the first result is consumed before the -- + second, this runs in constant heap space. 9You must force the returned tuple for that to work, e.g.  case splitAtST n xs of ) (ys,zs) -> consume ys ... consume zs xy34"Read a Word8 from the monad state 56#Read a Word16 in big endian format 78&Read a Word16 in little endian format 9:4Read a 24 bit word into Word32 in big endian format ;<=>#Read a Word32 in big endian format ?@&Read a Word32 in little endian format AB#Read a Word64 in big endian format CD&Read a Word64 in little endian format EFGHIJKLMNOPQRSTO(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. UVO(1).@ Read a 2 byte Word16 in native host order and host endianness. WXO(1).9 Read a Word32 in native host order and host endianness. YZO(1).8 Read a Word64 in native host order and host endianess. [\]^_A !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_A !"'#$%&+2,-3()*4F5G./0167:;>?BCJKNORS89<=@ADEHILMPQTUVWXYZ[\]^_A !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_Portable Experimental-George Giorgidze <http://cs.nott.ac.uk/~ggg/>`abcdefghijklmnopqr`abcdefghijklmnopqrmdefghl`cbaonpqrijk`cbaabcdefghefghijkjklmnopqrPortable Experimental-George Giorgidze <http://cs.nott.ac.uk/~ggg/>stuvz{wxyz|}~stuvwxyzwxyzstuvstuvtuvwxyzPortable Experimental-George Giorgidze <http://cs.nott.ac.uk/~ggg/>{|}~{|}~{|}~{ |}~|}~5  Portable Experimental-George Giorgidze <http://cs.nott.ac.uk/~ggg/>s      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTS      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST]6789:25431.0/      !"#!"#!"!!!!-,+*)('&%$;<=>?@ABDCEFGHJIKLMNOPQRSTS+      !"#!"#!"!!!!      !"#$%&'()*+,-.0//0125433456789:789:;<=>?@ABCDEFGHIJKLMNOPQRST      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkllmnopqrstuvwxyz{|}~mvh~      !"#$%&'()*+,--./0123456789:;<=>?@AB~CDEFGHIJKLLMNOPMQ MQ MQ MROMQSTUVWXYZ[\]^_'`aabcdefghijklmnopqrstuvwxyz{|}~ HCodecs-0.2Data.ByteString.BuilderData.ByteString.Parser Data.Audio Codec.WavCodec.SoundFont Codec.MidiData.ArbitraryBuilderempty singletonputWord8appendfromByteStringfromLazyByteString putStringtoLazyByteStringflush putWord16be putWord16le putWord24be putWord24le putWord32be putWord32le putWord64be putWord64leputInt8 putInt16le putInt16be putInt32le putInt32be putInt64le putInt64be putWordHost putWord16host putWord32host putWord64host putVarLenBe putVarLenLeParser runParserrunParserStatechoiceskip lookAhead lookAheadM lookAheadEexpect getString getStringNulstring bytesRead remainingisEmpty getByteStringgetLazyByteStringgetLazyByteStringNulgetRemainingLazyByteStringgetBytessatisfygetWord8word8 getWord16beword16be getWord16leword16le getWord24beword24be getWord24leword24le getWord32beword32be getWord32leword32le getWord64beword64be getWord64leword64legetInt8int8 getInt16leint16le getInt16beint16be getInt32leint32le getInt32beint32be getInt64leint64le getInt64beint64be getWordHostwordHost getWord16host word16host getWord32host word32host getWord64host word64host getVarLenBevarLenBe getVarLenLevarLenLe SampleMode PressLoopContLoopNoLoopAudio sampleRate channelNumber sampleDataAudibletoSample fromSample SampleDataSample sampleNumber sampleTypeconvertparseSampleDatabuildSampleData AudibleInWav parseSample buildSample bitsPerSample importFile exportFileparseWavbuildWavShdr sampleNamestartend startLoopendLoop originalPitchpitchCorrection sampleLinkInstinstName instBagNdx Generator ReservedGenRootKeyExclusiveClass ScaleTuning SampleIndexFineTune CoarseTuneLoopEndAddressCoarseOffset InitAttenVelKeyLoopStartAddressCoarseOffsetVelRangeKeyRange InstIndexKeyToVolEnvDecayKeyToVolEnvHold ReleaseVolEnv SustainVolEnv DecayVolEnv HoldVolEnv AttackVolEnv DelayVolEnvKeyToModEnvDecayKeyToModEnvHold ReleaseModEnv SustainModEnv DecayModEnv HoldModEnv AttackModEnv DelayModEnv FreqVibLfo DelayVibLfo FreqModLfo DelayModLfoPanReverbChorus ModLfoToVolEndAddressCoarseOffset ModEnvToFc ModLfoToFcInitQInitFc ModEnvToPitch VibLfoToPitch ModLfoToPitchStartAddressCoarseOffsetLoopEndAddressOffsetLoopStartAddressOffsetEndAddressOffsetStartAddressOffsetModsrcOperdestOperamount amtSrcOper transOperBaggenNdxmodNdxPhdr presetNamepresetbank presetBagNdxlibrarygenre morphologyPdtaphdrspbagspmodspgensinstsibagsimodsigensshdrsSdtasmplsm24Info ReservedInfo UsedToolsCommentsCopyrightMessageIntendedProductAuthors CreationDate RomVersionRomNameBankNameTargetSoundEngineVersion SoundFontinfossdtapdta isSampleIndex isInstIndexparseSoundFontbuildSoundFont parseInfos buildInfos parseSdta buildSdta parsePdta buildPdtaMessageSysexReserved KeySignature TimeSignature SMPTEOffset TempoChangeTrackEnd DeviceName ProgramName ChannelPrefixCuePointMarkerLyricsInstrumentName TrackName CopyrightTextSequenceNumber PitchWheel pitchWheelChannelPressure ProgramChange ControlChangecontrollerNumbercontrollerValue KeyPressurepressureNoteOnNoteOffchannelkeyvelocityTempoBankPresetPressureVelocityChannelTimeTicksTimeDivTicksPerSecond TicksPerBeatTrackFileType MultiPattern MultiTrack SingleTrackMidifileTypetimeDivtracks isNoteOffisNoteOn isKeyPressureisControlChangeisProgramChangeisChannelPressure isPitchWheelisChannelMessageisSysexMessage isMetaMessage isTrackEndremoveTrackEnds toSingleTrackmerge toAbsTime fromAbsTime toRealTime fromRealTime parseMidi buildMidi parseTrack buildTrack parseMessage buildMessageintegralRandomRarrayGen stringNulGenBufferbytestring-0.9.1.10Data.ByteString.Lazy.Internal ByteString runBuilderData.ByteString.LazyData.ByteString.Internal fromChunks defaultSize unsafeLiftIOwithSize mapBuilder ensureFreewriteN writeNBuffer newBuffer writeNbyteswriteNBufferBytes varLenAux1 varLenAux2unParserSgetput initStatemkStatejoin splitAtSTreadNgetPtrparserSelectorbytesPerSampleparseFmtbuildFmt parseData buildDataparseUnknownChunk buildInfobuildInfoString parseSubchunk buildSubchunk parsePhdr buildPhdrparseBagbuildBagparseModbuildModparseGenbuildGen parseInst buildInst parseShdr buildShdr parseMessagesparseChannelMessage parseChannel parseNoteOff parseNoteOnparseKeyPressureparseControlChangeparseProgramChangeparseChannelPressureparsePitchWheelbuildChannelMessageparseMetaMessagebuildMetaMessageparseSequenceNumber parseTextparseCopyrightparseTrackNameparseInstrumentName parseLyrics parseMarker parseCuePointparseProgramNameparseDeviceNameparseChannelPrefix parseTrackEndparseTempoChangeparseSMPTEOffsetparseTimeSignatureparseKeySignature parseReservedparseSysexMessagebuildSysexMessage