Îőłh% P‡      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…† None ',ÉparsnipAn _immutable_ foreign cstring. This is mostly useful for things like calling strstr through ffi where the needle needs to be null terminated.parsnipMissing primitive     Safe-Inferred°parsnipŮDeliberately lazy, so we don't bother to compute the exact line and column until forced.parsnipO(n)˘ in the size of the input bytestring to actually use one. If used primarily for error location reporting, then this probably puts the burden in the right place.parsnip,Use this til we get a pretty printer in hereNone !',.4ÉËÖŮŰâęîř'parsnip Unlifted ‡3parsnipŇsuper-duper unsafe. Fabricates bytestrings that directly reference constant memory4parsnipÎSuper unsafe. Fabricates a bytestring that directly reference constant memory.Usage: hello = lit "hello"#  !"#$%&'(,+)*-./012345678 #$%'(,+,+-.&*)/01432 !"5678None,ÉŰî\@ABCD@ABCDNone,ÉŰęîóIparsnipRecord the current positionJparsnipReturn to a previous location.Kparsnip?To grab all the text covered by a given parser, consider using snippingŮ and applying it to a combinator simply recognizes the content rather than returns it. L a ˆĆ is significantly cheaper than assembling one from smaller fragments.EFGHIJKL EFGGHIJKLNone ,/ÉËÖŰâî ŠVparsnip>We can do this two ways, this way is O(1) but needs KnownBase.WparsnipLinear time, but no  KnownBase dependency.Zparsnip input = snip minBound maxBound[parsnip $rest = mark >>= p -> snip p maxBound\parsnipK‹ is a smidge faster, easier to type, if less fun to say, and doesn't need you to fiddle with explicit type application to actually apply.âThe benefit of this combinator is that it is easy to come up with numbers of bytes into a file, and this combinator will automatically trim the result to the actual range of bytes available, whereas constructing an illegal E will error in ‰Š‹˜ or whatever other combinator tries to produce one out of range to maintain the invariant that a mark is always a well formed location in the content.]parsnipI is generally faster#18EIJKLSTUVWXYZ[\]^#81STXYVWUEIJKLZ]\[^None ,ÉŰĺî Ţ_`abcdefghijklmnopqrstu_`adefghiorpsqjnklmtubc None )3#18EIJKLSTUVWXYZ[\]^_`abcdefghijklmnopqrstuNone ,ÉŰĺî …parsnip0Peek at the previous character. Always succeeds.†parsnipĹPeek at the previous character. Fails if we're at the start of input.2vwxyz{|}~€‚ƒ„…†v2wz€ƒ„‚{|}~…†xyŒ      !"#$%%&'()**+,-./0123456789:;<=>?@ABCDEFGHIJKKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzd{|}~opqstu€wx‚ƒ„…†‡ˆƒ‰Šƒ‰‹ƒ‰Œparsnip-0-inplaceText.Parsnip.Internal.PrivateText.Parsnip.LocationText.Parsnip.Internal.ParserText.Parsnip.Internal.SimpleText.Parsnip.Internal.MarkText.Parsnip.ParserText.Parsnip.Char8Text.Parsnip.Word8 Text.Parsnip ForeignString pure_strlenc_strlen c_strncmpc_memchriomutableByteArrayContents#pinnedByteArrayFromString0pinnedByteArrayFromStringN0packForeignStringwithForeignStringcintcsizemkBS$fIsStringForeignString$fShowForeignString$fEqForeignString$fOrdForeignStringLocation locationLinelocationColumnlocationSourcelocationlocated$fShowLocation KnownBase reflectBaseBase baseOriginal baseContents baseStartbaseEndParser runParserResultOptionOption#FailOKNoneSome mapOption setOption mapResult setResulttryword8litNlitbytesstartendparse$fIsStringParser$fPrimMonadParser$fMonadPlusParser$fAlternativeParser $fMonadParser$fApplicativeParser$fFunctorParser SimpleResultSimpleOK SimpleFailrelativeabsoluteMarkMk minusMarkmarkreleasesnipsnipping$fIxMark $fEnumMark $fBoundedMark$fEqMark $fOrdMark $fShowMarkatEnd endOfInputtakeskipskip0 tillSubstringskipTillSubstringinputrestbetwixtposlocsatisfycharnotCharnextChar nextChar'anyChardigitspace skipSpace letter_asciiletter_iso8859_15 skipWhileskipTill skipTillSome skipTillChar skipWhileSomewhiletilltillChar whileSometillSome previousChar previousChar'notWord8 nextWord8 nextWord8'anyWord8 skipTillWord8 tillWord8 previousWord8previousWord8'base GHC.MaybeMaybebytestring-0.10.12.1Data.ByteString.Internal ByteStringGHC.EnumtoEnumfromEnumsucc