úÎ!YŽS‚m      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklNone &'FGMNQSX@v%frisbyReturn a value, always succeedsfrisbyMatch a specified characterfrisbyMatch some text frisbygImmediately consume and return the rest of the input equivalent to (many anyChar), but more efficient.!frisby!Match any character, fails on EOF"frisbyFMatch first argument, then match the second, returning both in a tuple#frisby*Match a pair of lists and concatenate them$frisbyRMatch first argument, then match the second, returning only the value on the left. x <<- y = x <> y ## fst%frisbySMatch first argument, then match the second, returning only the value on the right. x ->> y = x <> y ## snd&frisbywOrdered choice, try left argument, if it fails try the right one. This does not introduce any backtracking or penalty.'frisbyJOrdered choice, try left argument, if it fails then return right argument.(frisby4Map a parser through a function. a fancy version of m.)frisby2Parse left argument and return the right argument.*frisby$Succeeds when the argument does not.+frisby\Succeeds when the argument does, but consumes no input. Equivalant to p -> discard (peek p),frisbyDParse something and return it, but do not advance the input stream.-frisby0Succeed only if thing parsed passes a predicate..frisby…Parse many of something. Behaves like * in regexes. This eats as much as it possibly can, if you want a minimal much rule, then use / which stops when a./frisbyuParse many of something via the minimal munch rule. behaves like *? in perl regexes. The final item is not consumed.0frisby6First matching parse wins, a simple iteration of (//).1frisbyIGet current position in file as number of characters since the beginning.2frisby Equivalent to 3between open close thing = open ->> thing <<- close3frisby3Parse something if you can, else return first value option a p = p // unit a4frisby*Parse something if you can, discarding it. !option a p = discard p // unit ()5frisby#Throw away the result of something. discard p = p ->> unit ()6frisbyam at the end of string.7frisby"am at the beginning of the string.8frisby6Match one or more of something via maximal munch rule.9frisby#Match one of the set of characters.:frisby4Match any character other than the ones in the list.;frisby,Fails, is identity of (//) and unit of (<>).<frisbyRun a PEG grammar. Takes the rank-2 argument in order to ensure a rule created in one PM session isn't returned and used in another PEG parser.SThere is no need for special error handling, as it can be trivially implemented via i -- parse complete file, returning 'Nothing' if parse fails fmap Just (myParser <<- eof) // unit Nothing^There is also no need for the parser to return its unused input, as that can be retrieved via  . U-- Now this returns (a,String) where String is the unconsumed input. myParser <> rest=frisbyHCreate a new rule, which may be used recursively and caches its results.!This is intended to be use in an 'mdo' block. such as the following. ÿUadditive = mdo additive <- newRule $ multitive <> char '+' ->> additive ## uncurry (+) // multitive multitive <- newRule $ primary <> char '*' ->> multitive ## uncurry (*) // primary primary <- newRule $ char '(' ->> additive <<- char ')' // decimal decimal <- newRule $ many1 (oneOf ['0' .. '9']) ## read return additiveOAll recursive calls must be bound via a rule. Left recursion should be avoided.>frisby9always succeeds, returning true if it consumed something.?frisby™Create a new regular expression matching parser. it returns something in a possibly failing monad to indicate an error in the regular expression itself.@frisby@Show a representation of the parsed regex, mainly for debugging.AfrisbyBMake a new regex but abort on an error in the regex string itself.B    !"#$%&'()*+,-./0123456789:;<=>?@AB=<   &"#%$'()!761:9 5;,*>-+.8/2034?A@"3#3$4%4&1'1(2)2NoneRÞYfrisbyMatch a control character.Zfrisby3Match a white-space character in the Latin-1 range.[frisby0Match a lower-case alphabetic Unicode character.\frisby?Match an upper-case or title-case alphabetic Unicode character.]frisby5Match an alphabetic Unicode character. Equivalent to c.^frisby7Match an alphabetic or numeric digit Unicode character._frisby$Match a printable Unicode character.`frisbyMatch an ASCII digit.afrisbyMatch an ASCII octal digit.bfrisby!Match an ASCII hexadecimal digit.cfrisby5Match an alphabetic Unicode character. Equivalent to ].dfrisbyMatch a Unicode mark character.efrisby"Match a Unicode numeric character.ffrisby&Match a Unicode punctuation character.gfrisby!Match a Unicode symbol character.hfrisby-Match a Unicode space or separator character.ifrisby-Match a character of the ASCII character set.jfrisby<Match a character of the ISO 8859-1 (Latin-1) character set.kfrisby!Match an ASCII upper-case letter.lfrisby!Match an ASCII lower-case letter.YZ[\]^_`abcdefghijklYZ[\]^_`abcdefghijkln            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst"frisby-0.2.4-obGV5VmbZCB8BnQS5ogDhText.Parsers.FrisbyText.Parsers.Frisby.CharbaseGHC.Base<*>pure*> ApplicativeControl.Applicative unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrow getZipListZipListData.Functor.ConstgetConstConst Data.Functor<$>liftA3liftA<**><$<*liftA2some<|>empty AlternativePPMunitchartextrestanyChar<><++><<-->>////>####> doesNotMatchmatchespeekonlyIfmany manyUntilchoicegetPosbetweenoptionoptionaldiscardeofbofmany1oneOfnoneOf parseFailurerunPegnewRuleisMatchnewRegex showRegexregex$fApplicativePM $fMonoidPE $fSemigroupPE$fAlternativePE$fApplicativePE $fFunctorPE$fFunctorResults $fEqToken $fOrdToken $fNumToken $fShowToken $fIxToken $fMonadPM $fMonadFixPM $fFunctorPM $fFunctorP$fApplicativeP$fAlternativeP $fSemigroupP $fMonoidP $fShowRegex $fEqRegex $fOrdRegexcontrolspacelowerupperalphaalphaNum printabledigitoctDigithexDigitlettermarknumber punctuationsymbol separatorasciilatin1 asciiUpper asciiLowerfmap