o_      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe*35KLN 'Class whose members are super-types of .9Class that captures elements of an input string (tokens). is the end-of-string symbol  is the empty-string symbolBoth  and  must be distinct from eachother and from all tokens in the input string. The show instance is required to throw error messages.This function is used for matching grammar tokens and input tokens. Override this method if, for example, your input tokens store lexemes while the grammar tokens do not A list of sA datatype for representing tokens with some builtins and an aribitrary Token constructor. This datatype stores (optional) lexemes.Palternative identifiers, for example functions vs. constructors (as in Haskell). A list of sA X is either a nonterminal or a terminal, where a terminal contains some arbitrary token.dA grammar slot acts as a label to identify progress of matching a production. As such, a slot is a Prod with its right-hand side split in two: a part before and a part after 'the dot'. The dot indicates which part of the right-hand side has been processed thus far.7A grammar is a start symbol and a list of productions.  A list of s.{A production binds a nonterminal identifier (left-hand side) to a list of symbols (the right-hand side of the production).Identifier for nonterminals.!    Safe35KLNAssumes  and '#'" never appear in the inpur string.Safe*35KLNAn SPPFNodeI is either a symbol node, an intermediate node, a packed node or a dummy.!!Stores edges, potentially costly."'Stores intermediate nodes using nested  Data.IntMaps, nesting is as follows: left extent right extent set of slots #!Stores symbol nodes using nested  Data.IntMaps, nesting is as follows: left extent right extentset of symbols$!Stores packed nodes using nested  Data.IntMaps, nesting is as follows: left extent right extent!dot position (from left to right))mapping from productions to set of pivots%An % contains symbol nodes, intermediate nodes, packed nodes and edges between them. See Scott and Johnstone (2013) for an explanation of the %./ !"#$%&- !"#$%&+ !"#$%&Safe35KLN'The  ParseResult datatype contains the SPPF/ and some other information about the parse:% Whether the parse was successful2The number of descriptors that have been processed5The number of symbol nodes (nonterminal and terminal)The number of intermediate noesThe number of packed nodesThe number of GSS nodesThe number of GSS edges4 A list of  ParserOptions5%An option updates the current set of ./Flags to influence the behaviour of the parser.$Monad for implicitly passing around contextConnecting it allPop-setGSS representationThe worklist and descriptor set Types for "Representation of the input string Create an  (nonterminal) from a String.6)A smart constructor for creating a start  (nonterminal).7#A smart constructor for creating a  (production).8/A smart constructor for creating a nonterminal .9,A smart constructor for creating a terminal .5The default flags: * Do not add symbol nodes to the %*. * Do not add intermediate nodes to the %. * Do not add edges to the %`. * Flexible binarisation. * The three furthest discoveries of a token mismatch are reported. Execute the given Options in left-to-right order on .: Create the %> with all nodes and edges, not necessarily strictly binarised.;-Create all nodes, but no edges between nodes.<Create packed-nodes only.=/Fully binarise the SPPF, resulting in a larger % and possibly slower runtimes. When this flag is on, packed nodes can only have a single symbol node child or one intermediate node child and one symbol node child. With the flag disabled a packed node can have two symbol node children.>HSet the maximum number of errors shown in case of an unsuccessful parse.?Run the GLL parser given a  t and a list of t s, where t6 is an arbitrary token-type. All token-types must be .@)Run the GLL parser given some options, a  t and a list of ts."If no options are given a minimal % will be created:only packed nodes are createdthe resulting % is not strictly binarisedQ'()*+,-./0123456789:;<=>?@3 !"#$%&'()*+,-./0123456789:;<=>?@36789?@45=:;<>'()*+,-./0123% #"$!&4' ()*+,-./0123456789:;<=>?@Safe35KLN A9Settings for changing the behaviour of the builtin lexer L. Lexers are built using Text.Regex.Applicative.C+Which keychars to recognise? Default: none.D+Which keywords to recognise? Default: none.E4What is considered a whitespace character? Default: .F*How does a line comment start? Default: '"//"'.GPHow to recognise identifiers? Default alphanumerical with lowercase alpha start.H\How to recognise alternative identifiers? Default alphanumerical with uppercase alpha start.IArbitrary tokens (a,b). a is the token name, b is a regular expression.J The default A.KA lexer using the default A.LA lexer parameterised by A. ABCDEFGHIJKL ABCDEFGHIJKLABCDEFGHIJKLNone35KLNMAn impure reference to a N.NA N maps left-extent l to right-extent r to some results a, indicating the the substring ranging from l to r is derived with parse result a.O Clears the N% to which the given reference refers.PCreate a reference to a fresh N.MNOPMNOPMNOP Safe35KLN Safe35KLN QA single option.R A list of Q(s for evaluating combinator expressions.CombinatorOptions datatype * left_biased_choice: see function leftBiased * pivot_select: provide a filtering function on pivots'The default options: no disambiguation. Enables a 'longest-match' at production level. Enables a 'shortest-match' at production level.2Discards a pivot select option (internal use only)Enables 'longest-match' at non-terminal level. SHSet the maximum number of errors shown in case of an unsuccessful parse.TIf there are no parse results, the default behaviour is to return an empty list. If this option is used, a runtime error will be reported, with debugging information.Turns all occurrences of <||> into a 'left biased' variant: only return results of the second alternate if the first alternate does not have any results.UOWhether to use unsafe memoisation to speed up the enumeration of parse results.rFilter a list such that the only remaining elements are equal to the maximum element, given an ordering operator.QRSTUQRSTUQRSTU Safe35KLN               None35KLN7VClass for lifting to ^. XClass for lifting to ]. ZClass for lifting to `.\ Synonym of [ for creating derived combinators. ]@A list of alternatives represents the right-hand side of a rule.^[A combinator expression representing an alternative: the right-hand side of a production._^A combinator expression representing a BNF-grammar. The terminals of the grammar are of type tF. When used to parse, the expression yields semantic results of type a. `2A combinator expression representing a symbol. A `j either represents a terminal or a nonterminal. In the latter case it is constructed with (a variant of) fZ and adds a rule to the grammar of which the represented symbol is the left-hand side.The grammar of a given parser.a Runs a parser given a string of [s and returns a list of semantic results, corresponding to all finitely many derivations.bRun the parser with some R.cRun the parser with some Rj and return either an error or the results. Any returned results will be a list of length greater than 0.dGet the ', containing an %?, produced by parsing the given input with the given parser.eGet the ' given some 4 and R. fvForm a rule by giving the name of the left-hand side of the new rule. Use this combinator on recursive non-terminals.g Variant of fl for recursive non-terminals that have a potentially infinite number of derivations for some input string.A non-terminal yields infinitely many derivations if and only if it is left-recursive and would be left-recursive if all the right-hand sides of the productions of the grammar are reversed.hForm an ^J by mapping some semantic action overy the result of the second argument.iAdd a `* to the right-hand side represented by an ^ creating a new ^]. The semantic result of the first argument is applied to the second as a cross-product. jAdd an ^ to a list of ^D The resuling '[] :. AltExpr' forms the right-hand side of a rule.kApply this combinator to an alternative to indicate that the alternative is for a left-associative operator. Used for top-down disambiguation.lApply this combinator to an alternative to indicate that the alternative is for a right-associative operator. Used for top-down disambiguation.mApply this combinator to an alternative to indicate that the alternative is for an associative operator. Used for top-down disambiguation.n+Create a symbol-parse for a terminal given:The # token represented by the terminal.A function from that  to a semantic result.oParse a single character. char c = term_parser c id Currently, this is the only character-level combinator exported by this module. Please use token-level combinators for practical parsing. Might change in the future.p"Parse a single character, using a  type.q"Parse a single character, using a  type.r Parse a single integer, using a 5 type. Returns the lexeme interpreted as an integer.s Parse a single Boolean, using a 4 type. Returns the lexeme interpreter as a Boolean.t'Parse a single String literal, using a ; type. Returns the lexeme interpreted as a String literal.u#Parse a single identifier, using a ' type. Returns the lexeme as a String.v/Parse a single alternative identifier, using a ' type. Returns the lexeme as a String.w(Parse a single arbitrary token, using a  type. Returns the lexeme.xQThe empty right-hand side that yields its first argument as a semantic result.y'This function memoises a parser, given:A M pointing to a fresh N, created using P.The ` to memoise.Use y on all parsers that are expected to derive the same substring multiple times. If the same combinator expression is used to parse multiple times the M needs to be cleared using O.y relies on 2 and is therefore potentially unsafe. The option U5 enables memoisation. It is off by default, even if y$ is used in a combinator expression.z3Helper function for defining new combinators. Use zH to form a new unique non-terminal name based on the symbol of a given ` and a 1 that is unique to the newly defined combinator.Specialised fmap for altparsers{ Version of h: that ignores the semantic result of its second argument. | Version of i8 that ignores the semantic result of the first argument.} Version of i9 that ignores the semantic result of the second argument.~ Version of ~D that prioritises productions from left-to-right (or top-to-bottom).Try to apply a parser multiple times (0 or more). The results are returned in a list. In the case of ambiguity the largest list is returned.Try to apply a parser multiple times (1 or more). The results are returned in a list. In the case of ambiguity the largest list is returned.Try to apply a parser multiple times (0 or more). The results are returned in a list. In the case of ambiguity the largest list is returned.Try to apply a parser multiple times (1 or more). The results are returned in a list. In the case of ambiguity the largest list is returned.Try to apply a parser multiple times (0 or more). The results are returned in a list. In the case of ambiguity the largest list is returned.Try to apply a parser multiple times (1 or more). The results are returned in a list. In the case of ambiguity the largest list is returned.InternalInternalSame as " but with an additional separator.Same as " but with an additional separator.Same as " but with an additional separator.Same as " but with an additional separator.Same as " but with an additional separator.Same as " but with an additional separator.DTry to apply a parser once, but proceed if unsuccessful (yielding  as a result in that case).KVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'n '()*+,-./0123:;<=ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~nnxpqrstvuwoijhfg_`^] abRQST:;<=cde'()*+,-./0123KLABCDEFGHIJz{|}~klmXYZ[\VWyPONMUEVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&' fghij{|}~None35KLN%Defines and executes some unit-tests  None35KLNn '()*+,-./0123:;<=ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(  !""#$%%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJJKLMNOPQRSTUVWX Y Z G [ \]^_`abcdefgHIhijklmnopqrstuvwxyz{|}~ )'                  eg !"#$gll_8cPiAf1AKLdF1oXcqrUKiwGLL.Combinators.Interface GLL.ParserGLL.Combinators.Test.InterfaceGLL.Types.AbstractGLL.Parseable.CharGLL.Types.GrammarGLL.Combinators.LexerGLL.Combinators.MemoisationGLL.Combinators.Visit.GrammarGLL.Combinators.OptionsGLL.Combinators.Visit.SemGLL.Combinators SubsumesTokenupcastdowncast ParseableeosepsmatchesTokenCharKeywordEOSEpsilonIntLitBoolLit StringLitIDLitAltIDLitSymbolsSymbolNtTermSlotGrammarProdsProdSPPFNodeSNodeINodePNodeDummyEdgeMapImdMapSymbMapPackMapSPPFshowSPPF ParseResult sppf_result res_successnr_descriptorsnr_nterm_nodes nr_term_nodesnr_intermediate_nodesnr_packed_nodes nr_sppf_edges nr_gss_nodes nr_gss_edges error_message ParseOptions ParseOptionstartprodntermtermfullSPPFallNodespackedNodesOnlystrictBinarisation maximumErrorsparseparseWithOptions LexerSettingskeycharskeywords whitespace lineComment identifiersaltIdentifierstokens emptyLanguage default_lexerlexerMemoRef MemoTablememClear newMemoTableCombinatorOptionCombinatorOptions throwErrorsuseMemoisation IsAltExprtoAltHasAltsaltsOf IsSymbExprtoSymbmkRuleAltExprsAltExprBNFSymbExprparseWithOptionsAndError parseResultparseResultWithOptions<:=><::=><$$><**><||>lassocrassocassoc term_parsercharkeycharkeywordint_litbool_lit string_litid_lit alt_id_littokensatisfymemomkNt<$$**><**<::=manymany1somesome1multiple multiple1 manySepBy manySepBy1 someSepBy someSepBy1 multipleSepBymultipleSepBy1optionalmainTokens$fParseableToken $fShowToken$fSubsumesTokenToken$fParseableCharbaseGHC.Base$ FollowMapFirstMap SelectMap PrefixMapProdMapPEdgeSEdgeNtLPrLSlotL emptySPPF pNodeLookup pMapInsert sNodeLookup sNodeInsert sNodeRemove iNodeLookup iNodeInsert iNodeRemove eMapInsertinUtoUshowDshowGshowPshowSnTepsilon fixedMapsisNtisTermisChar $fShowSymbol $fShowSlotFlagsGLLMutablePcalGSSRcal LhsParamsInput string2nt defaultFlags runOptions symbol_nodesintermediate_nodesedgesflexible_binarisation max_errors mut_successmut_sppf mut_worklistmut_descriptorsmut_gss mut_popsetmut_mismatches MisMatchesGSlotU0GSSNodeGSSEdgeUcal RhsParamsrunGLL addSPPFEdgeaddDescrgetDescraddPop getChildren addGSSEdgegetPops addSuccessgetFlags addMisMatchgll joinSPPFsresultFromMutable renderErrors$fShowParseResult $fMonadGLL $fFunctorGLL$fApplicativeGLL$fShowSPPFNode $fShowGSlot GHC.UnicodeisSpacelTokens memLookup memInsert Grammar_Expr grammar_nterm grammar_apply grammar_seq PCOptionsdefaultOptions maximumPivot minimumPivotanyPivotmaximumPivotAtNt leftBiased maximumsWithleft_biased_choice pivot_selectpivot_select_nt throw_errorsdo_memo maintainWith AncestorsSem_AltSem_Symb sem_nterm sem_applysem_seq inAncestors toAncestorsgrammarGHC.IOunsafePerformIOString.$. multiple_ multiple1_Nothingparse' defaultPOptsmkNtRulesepBysepBy1 $fIsAltExprOO$fIsAltExprSymbExpr$fIsAltExprAltExpr $fHasAltsOO$fHasAltsSymbExpr$fHasAltsAltExpr$fIsSymbExprOO$fIsSymbExprSymbExpr$fIsSymbExprAltExpr