h&Gj      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                                                                                                                                                                                                                                                                                       ! " " " " " " " " " " " " " " " " " " " " " " " " " # # # # # $ $ $ $ $ $ $ $ $ $ $ $ $ $ % % % % % % % & & & & & & & & & & & & & & & ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ( ( ( ) * * * * * + + + , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , - - - - . . . . . . . . . . / 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 5 5 5 5 5 5 5 5 5 6 6 7 7 7 7 7 7 7 7 7 7 8 8 9 : ; ; ; < < < < < < < < < < < < < < < = = = = = = = = = = = = > > > > > > > > > > > > > > > ? ? ? @ @ @ A B B B B B B B C C C C C D D D D D D D D D D D D D D D D E E E E E E E E E E E E E F F F F F F F F G G G G G G G G G G G H H H H H H H H H H H I J K L M M M N O P P P P P Q R R R R R R R R R R R R R R R R R RRRSTTTTTTTTUVVVVVWWWWWWWWWWWXXXXXXXXXXXXXXNone#$%05679>?$BNFC3$Get the start position of something.BNFC3+Start position (line, column) of something.YNone#$%05679>?%ZNone#$%05679>?%None#$%05679>?+BNFC3>Finite map from text to token organized as binary search tree.BNFC3 Nil (leaf).BNFC3 Binary node.BNFC3Token with position.BNFC3*Keyword or symbol tokens have a unique ID.BNFC3Keyword or symbol text.BNFC3 Unique ID.BNFC3Token without position.BNFC3Reserved word or symbol.BNFC3String literal.BNFC3Integer literal.BNFC3 Identifier.BNFC3Float literal.BNFC3Character literal.BNFC3Smart constructor for ) for the sake of backwards compatibility.BNFC3Create a token with position.BNFC3Pretty print a position.BNFC39Pretty print the position of the first token in the list.BNFC3Get the position of a token.BNFC3Get line and column of a token.BNFC3"Get line and column of a position.BNFC3+Convert a token into "position token" form.BNFC3Convert a token to its text.BNFC3Convert a token to a string.BNFC3Convert potential keyword into token or use fallback conversion.BNFC3The keywords and symbols of the language organized as binary search tree.BNFC3Unquote string literal.BNFC3Encode a Haskell String to a list of Word8 values, in UTF8 format.BNFC37Keyword/symbol ordering is determined by the unique ID.BNFC37Keyword/symbol equality is determined by the unique ID.None#$%05679>?-None#$%05679>?-G9 9 None#$%05679>?.RBNFC3The printer class does the job.BNFC3The top-level printing method.   None#$%05679>?2r BNFC3'A proper name for a generic decoration.BNFC3?A decoration is a functor that is traversable into any functor.The , superclass is given because of the limitations of the Haskell class system.  traverseF actually implies functoriality.Minimal complete definition:  traverseF or  distributeF.BNFC3 traverseF is the defining property.BNFC3%Decorations commute into any functor.BNFC3'Decorations commute into any bifunctor.BNFC3#Any decoration is traversable with traverse = traverseF. Just like any 76 is a functor, so is any decoration, given by just  traverseF , a functor.BNFC3Any decoration is a lens. set is a special case of dmap.BNFC30A typical decoration is pairing with some stuff.BNFC33Decorations compose. (Thus, they form a category.)BNFC3%The identity functor is a decoration.  None#$%05679>?6 BNFC3 Non-empty .BNFC3(Non-empty list. TODO change to newtype?BNFC3%Return the last element and the rest.BNFC3Build a list with one element.BNFC3"Append a list to a non-empty list.BNFC3#Prepend a list to a non-empty list.BNFC3More precise type for snoc.BNFC3(Concatenate one or more non-empty lists.BNFC3Like [\8. Duplicates in the first list are not removed. O(nm).BNFC3Checks if all the elements in the list are equal. Assumes that the '6 instance stands for an equivalence relation. O(n).BNFC3Like .BNFC3Like b.BNFC3Like ]^.BNFC3Like ]_.BNFC3Like ]`.BNFC3Like ab.BNFC3Like ab.BNFC3Unsafe!OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None#$%05679>?7BNFC3Lists of length D2.BNFC3Safe.BNFC3Safe.BNFC3Safe.BNFC3Unsafe!BNFC3Unsafe!   None#$%05679>?8 None#$%05679>?9 BNFC3 Overloaded  singleton constructor for collections.BNFC3A create-only possibly empty collection is a monoid with the possibility to inject elements.None#$%05679>?9BNFC3+spanEnd p l == reverse (span p (reverse l)). Invariant: 2l == front ++ end where (end, front) = spanEnd p l (From package ghc, module Util.) %& '() *+,-  ./012345$#"6789! :FI;<=>?@GHANLMBCDEJK| %& '() *+,-  ./012345$#"6789! :FI;<=>?@GHANLMBCDEJK|8| None#$%05679>?LMBNFC3Atomic character class.BNFC3A single character.BNFC30-9, LBNF digit.BNFC3Lower case character, LBNF lower.BNFC3Upper case character, LBNF upper.BNFC30Possibly overlapping union of character classes.BNFC3Any character, LBNF char.BNFC3Any of the given (D0) alternatives. List is free of duplicates.BNFC3Character classes are regular expressions that recognize character sequences of length exactly one. These are often distinguished from arbitrary regular expressions in lexer generators, e.g. in alex.We represent character classes as a difference of unions of atomic character classes. Semantics: +O CMinus ccYes ccNo O = O ccYes O O ccNo OBNFC3Character in question must be in one of these character classes.BNFC3Character in question must not be in one of these character classes. Must be empty if  is empty.BNFC38Check if a regular expression matches at least one word.9For differences, this check may err on the positive side.BNFC3;Regular expressions are constructed over character classes.,Use smart constructors to ensure invariants.BNFC3Atomic regular expression.BNFC3-Alternative/sum: List free of duplicates and RAlt. We use list instead of set to preserve the order given by the user. Empty list would mean empty language, but this is instead represented by the empty character class.BNFC3Difference. Most lexer generators do not support difference in general, only at the level of character classes. LBNF has general difference, so it is represented here.BNFC3,Language of the empty word (empty sequence).BNFC3 Sequence/product. List free of RSeq. Empty list is eps (language of the empty word).BNFC30 or more repetitions.  isn't , , ,  [] nor .BNFC31 or more repetitions.  isn't , , ,  [] nor .BNFC30 or 1 repetitions.  isn't , , ,  [] nor .BNFC3Check if a regular expression is nullable (accepts the empty string).BNFC30Simplifications included, but no distributivity.BNFC3Disjunction of two character classes is either a character class again () or simply the disjunction ().*(p1 m1) D (p2 m2) = (p1 D p2) (m1 D m2) if p1 E m2 and p2 E m1BNFC3Disjunction of two character classes is either a character class again () or simply the disjunction ().(p1 m1) (0 m2) = p1 m1 "(p1 m1) (p2 m2) = p1 (m1 D p2) if  p1 m2 = p1BNFC3Match given characters.BNFC3"Match any of the given characters.BNFC3Smart constructor for  CharClass from difference..Mutually reduce: (A - B) = (A B) - (B A)BNFC3 Union of character class unions.44 None#$%05679>?N^BNFC3$Something that can be parsed into a .BNFC3$Something that can be parsed into a .BNFC39Starting at line, counting from 1. (0 for invalid line.)BNFC3=Starting at column, counting from 1. (0 for invalid column.)None#$%05679>?NBNFC3Target languages  None#$%05679>?OBNFC3Global options.BNFC3Global options parser.  None#$%05679>?P None#$%05679>?QBNFC3$Create regex for multiline comments.*debugPrint $ mkRegMultilineComment "<" ">"'<'(char-'>')*'>',debugPrint $ mkRegMultilineComment "/*" "*/"9{"/*"}(char-'*')*'*'((char-["*/"])(char-'*')*'*'|'*')*'/'/debugPrint $ mkRegMultilineComment ""{"