!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~               None0234:T~1The enclosing statement is an iteration statement-The enclosing statement is a switch statement9The enclosing statement is some other statement. Note, ! is never pushed if the current labelSetQ is empty, so the list of labels in this constructor should always be non-emptyStatements, spec 12. {stmts} , spec 12.1 ; , spec 12.3 expr; , spec 12.4  if (e) stmt , spec 12.5 if (e) stmt1 else stmt2 , spec 12.5switch (e) clauses , spec 12.11while (e) do stmt , spec 12.6do stmt while (e); , spec 12.6 break lab; , spec 12.8 continue lab; , spec 12.7 lab: stmt , spec 12.12for (x in o) stmt , spec 12.6"ForStmt a init test increment body, !for (init; test, increment) body , spec 12.6#try stmt catch(x) stmt finally stmt , spec 12.14 throw expr; , spec 12.13 return expr; , spec 12.9 with (o) stmt , spec 12.10 var x, y=42; , spec 12.2function f(x, y, z) {...} , spec 13for..in initializer, spec 12.6 var xfoo.baz, foo[bar], zfor initializer, spec 12.6 empty!  var x, y=42" expr#!A variable declaration, spec 12.2$  var x = e;%Catch clause, spec 12.14& catch (x) {...}'Case clauses, spec 12.11( case e: stmts;) default: stmts;*Expressions, see spec 11+"foo", spec 11.1.3, 7.8,-RegexpLit a regexp global? case_insensitive?- -- regular expression, see spec 11.1.3, 7.8-41.99999, spec 11.1.3, 7.8.42, spec 11.1.3, 7.8/true, spec 11.1.3, 7.80null, spec 11.1.3, 7.81[1,2,3] , spec 11.1.42{foo:"bar", baz: 42} , spec 11.1.53this , spec 11.1.14foo , spec 11.1.25foo.bar , spec 11.2.16foo[bar , spec 11.2.17 new foo(bar) , spec 11.2.28@e', spec 11.4 (excluding 11.4.4, 111.4.5)9++x, x-- etc., spec 11.3, 11.4.4, 11.4.5:e1@e21, spec 11.5, 11.6, 11.7, 11.8, 11.9, 11.10, 11.11; e1 ? e2 : e3 , spec 11.12<e1 @=e2 , spec 11.13=e1, e2 , spec 11.14>f(x,y,z),, spec 11.2.3 funcexprs are optionally named?function f (x,y,z) {...}, spec 11.2.5, 13@)Left-hand side expressions: see spec 11.2Avariable reference, fooB foo.barC foo[bar]D8Property names in an object initializer: see spec 11.1.5E property name is an identifier, fooFproperty name is a string, "foo"Gproperty name is an integer, 42H:Prefix operators: see spec 11.4 (excluding 11.4.4, 11.4.5)I !J ~K +L -M typeofN voidO deleteP9Unary assignment operators: see spec 11.3, 11.4.4, 11.4.5Q ++xR --xS x++T x--U$Assignment operators: see spec 11.13Vsimple assignment, =W +=X -=Y *=Z /=[ %=\ <<=] >>=^ >>>=_ &=` ^=a |=b$Infix operators: see spec 11.5-11.11c <d <=e >f >=g inh  instanceofi ==j !=k ===l !===m &&n ||o *p /q %r -s <<t >>u >>>v &w ^x |y +}(A script in <script> ... </script> tags.~*extracts statements from a JavaScript typeReturns  if the statement is an IterationStatement according to spec 12.6.The ECMAScript standard defines certain syntactic restrictions on programs (or, more precisely, statements) that aren't easily enforced in the AST datatype. These restrictions have to do with labeled statements and break/continue statement, as well as identifier names. Thus, it is possible to manually generate AST's that correspond to syntactically incorrect programs. Use this predicate to check if an |@ AST corresponds to a syntactically correct ECMAScript program.;Checks if an identifier name is valid according to the specChecks if the # represents a valid identifier name>Checks if a string is in the list of reserved ECMAScript words<Checks if a character is valid at the start of an identifier4Checks if a character is valid in an identifier part  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~|}~ '()%& !"#$*+,-./0123456789:;<=>?bcdefghijklmnopqrstuvwxyUVWXYZ[\]^_`az{HIJKLMNODEFGPQRST@ABC*  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None0234:T DThings that have annotations -- for example, nodes in a syntax tree.Returns the annotation of the root of the tree-Sets the annotation of the root of the tree Removes annotations from a treeHChanges all the labels in the tree to another one, given by a function.@add an extra field to the AST labels (the label would look like  (a, b) )remove an extra fieldAssigns unique numeric (Int) ids to each node in the AST. Returns a pair: the tree annotated with UID's and the last ID that was assigned.9Modify the annotation of the root node of the syntax tree starting id tree root None 0234:T 8A class of AST elements that need fixup after generationnRenames empty identifiers, as well as identifiers that are keywords or future reserved words by prepending a '_'B to them. Also substitutes illegal characters with a "_" as well.Fixes an incorrect nesting of break/continue, making the program abide by the ECMAScript spec (page 92): any continue without a label should be nested within an iteration stmt, any continue with a label should be nested in a labeled statement (not necessarily with the same label); any break statement without a label should be nested in an iteration or switch stmt, any break statement with a label should be nested in a labeled statement (not necessarily with the same label). This is done by either assigning a label (from the set of labels in current scope) to a break/continue statement that doesn't have one (or has a label that's not present in the current scope). Additionally, it removes nested labelled statements with duplicate labels (also a requirement imposed by the spec).&choose n elements from a list randomly$Selects a random element of the list9      !"#$%&'()*+,-./0123456  9   6543210/.-,+*)('  &%$#"! 8      !"#$%&'()*+,-./0123456None0234:T)Convert an identifier to a String literal1Helper function to convert LValues to expressions;Convert an expression to an l-value. May fail with an errorp789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~l789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~p789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~p789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None 02349:;T gA class of pretty-printable ECMAScript AST nodes. Will pretty-print correct JavaScript given that the  predicate holds for the AST.)Pretty-print an ECMAScript AST node. Use render or  to convert  to .$Print a list of items in parenthesisA predicate to tell if the expression --when pretty-printed-- will begin with "function" or '{' and be thus unsafe to use in an expression statement without wrapping it in '()'.DEPRECATED: Use L instead! Renders a JavaScript program as a document, the show instance of $ will pretty-print it automaticallyDEPRECATED: Use - instead! Renders a list of statements as a DEPRECATED: Use - instead! Renders a list of statements as a  Pretty prints a string assuming it's used as an identifier. Note that per Spec 7.6 unicode escape sequences representing illegal identifier characters are not allowed as well, so we do not unicode-escape illegal characters in identifiers anymore. JEscapes a regular expression so that it can be parsed correctly afterwards ppRelationalExpression True is RelationalExpression, ppRelationalExpression False is RelationalExpressionNoIn:      !"#$%&'()8      !"#$%&'()None0234:T Safe0234:T*** Safe0234:T1The parser type, parametrised by the stream type s and the return value aSafe0234:TGreturns (s, True) if the number is an integer, an (s, False) otherwise+,-./0+,-./0None0234:T 1pchecks if the label is not yet on the stack, if it is -- throws an error; otherwise it pushes it onto the stack4The parser that parses a single ECMAScript statement+A parser that parses ECMAScript expressions+A parser that parses an ECMAScript program.,Parse from a stream given a parser, same as ` in Parsec. We can use this to parse expressions or statements alone, not just whole programs.$A convenience function that takes a 1 and tries to parse it as an ECMAScript program: "parseFromString = parse program ""A convenience function that takes a filename and tries to parse the file contents an ECMAScript program, it fails with an error message if it can't.JRead a JavaScript program from file an parse it into a list of statements(Parse a JavaScript program from a string:Parse a JavaScript source string into a list of statementsT213456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopThe parser to useName of the source filethe stream to parse, usually a JavaScript source to parse file name file namesource file nameJavaScript source to parseJavaScript sourceT213456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop None0234:Tqrstqrst None0234:T+Labels are either strings (identifiers) or empty (see 12.12 of the spec)8Annotates statements with their label sets; example use:+let jsa = reannotate (\a -> (a, Set.empty))Iin annotateLabelSets jsa snd (\labs (a, ls) -> (a, labs `Set.union` ls))u 12 ECMA262: the production  Identifier :  Statement is evaluated by adding  Identifier to the label ser of  Statement and then evluating  Statement . If the LabelledStatementT itsef has a non-empty label set, these labels are also added to the label set of  Statement5 before evaluating it. ... Prior to evaluation of a LabelledStatement, the contained  Statement@ is regarded as possessing an empty label set, unless it is an IterationStatement or a SwitchStatement\, in which case it is regarded as possessing a label set consisting of the single element, empty.annotation read functionannotation write functionthe script to annotatevwuxvwux None0234:TEThe statically-determinate lexical structure of a JavaScript program.ycIntermediate data structure that contains locally declared names and all references to identifers.yz{|}~enclosing environment local environment and references"environment and global definitionsbrowser/testing environmentyz{|}~None0234:T  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456677889:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ X                      !"#$%&'()*+,-./0123456789 :;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                    y        3language-ecmascript-0.17.2.0-IHIosVpQIzLJjzmdQgXn9ULanguage.ECMAScript3.Syntax'Language.ECMAScript3.Syntax.Annotations%Language.ECMAScript3.Syntax.Arbitrary#Language.ECMAScript3.Syntax.CodeGen Language.ECMAScript3.PrettyPrintLanguage.ECMAScript3.SourceDiffLanguage.ECMAScript3.ParserLanguage.ECMAScript3.Lexer&Language.ECMAScript3.Syntax.QuasiQuote'Language.ECMAScript3.Analysis.LabelSets)Language.ECMAScript3.Analysis.Environment!Language.ECMAScript3.Parser.State Language.ECMAScript3.Parser.Type Text.ParsecparseLanguage.ECMAScript3$parsec-3.1.11-DytKT37FVYQJRVdRwnazC8Text.Parsec.Pos SourcePos HasLabelSet getLabelSet setLabelSetEnclosingStatement EnclosingIterEnclosingSwitchEnclosingOther Statement BlockStmt EmptyStmtExprStmtIfStmt IfSingleStmt SwitchStmt WhileStmt DoWhileStmt BreakStmt ContinueStmt LabelledStmt ForInStmtForStmtTryStmt ThrowStmt ReturnStmtWithStmt VarDeclStmt FunctionStmt ForInInitForInVar ForInLValForInitNoInitVarInitExprInitVarDecl CatchClause CaseClause CaseDefault Expression StringLit RegexpLitNumLitIntLitBoolLitNullLitArrayLit ObjectLitThisRefVarRefDotRef BracketRefNewExpr PrefixExprUnaryAssignExpr InfixExprCondExpr AssignExprListExprCallExprFuncExprLValueLVarLDotLBracketPropPropId PropStringPropNumPrefixOp PrefixLNot PrefixBNot PrefixPlus PrefixMinus PrefixTypeof PrefixVoid PrefixDelete UnaryAssignOp PrefixInc PrefixDec PostfixInc PostfixDecAssignOpOpAssign OpAssignAdd OpAssignSub OpAssignMul OpAssignDiv OpAssignModOpAssignLShiftOpAssignSpRShiftOpAssignZfRShift OpAssignBAnd OpAssignBXor OpAssignBOrInfixOpOpLTOpLEqOpGTOpGEqOpIn OpInstanceofOpEqOpNEq OpStrictEq OpStrictNEqOpLAndOpLOrOpMulOpDivOpModOpSubOpLShift OpSpRShift OpZfRShiftOpBAndOpBXorOpBOrOpAddId JavaScriptScript unJavaScriptunIdisIterationStmtisValid pushEnclosing pushLabelisValidIdentifierisValidIdentifierNameisReservedWordisValidIdStart isValidIdPartisIter isIterSwitch$fHasLabelSetEnclosingStatement$fShowEnclosingStatement$fDefaultSourcePos$fDefaultJavaScript$fShowId$fEqId$fOrdId$fDataId $fFunctorId $fFoldableId$fTraversableId $fShowInfixOp $fDataInfixOp $fEqInfixOp $fOrdInfixOp $fEnumInfixOp$fShowAssignOp$fDataAssignOp $fEqAssignOp $fOrdAssignOp$fShowUnaryAssignOp$fDataUnaryAssignOp$fEqUnaryAssignOp$fOrdUnaryAssignOp$fShowPrefixOp$fDataPrefixOp $fEqPrefixOp $fOrdPrefixOp $fShowProp $fDataProp$fEqProp $fOrdProp $fFunctorProp$fFoldableProp$fTraversableProp$fShowStatement$fDataStatement $fEqStatement$fOrdStatement$fFunctorStatement$fFoldableStatement$fTraversableStatement$fShowForInInit$fDataForInInit $fEqForInInit$fOrdForInInit$fFunctorForInInit$fFoldableForInInit$fTraversableForInInit $fShowLValue $fEqLValue $fOrdLValue $fDataLValue$fFunctorLValue$fFoldableLValue$fTraversableLValue$fShowExpression$fDataExpression$fEqExpression$fOrdExpression$fFunctorExpression$fFoldableExpression$fTraversableExpression $fShowForInit $fDataForInit $fEqForInit $fOrdForInit$fFunctorForInit$fFoldableForInit$fTraversableForInit $fShowVarDecl $fDataVarDecl $fEqVarDecl $fOrdVarDecl$fFunctorVarDecl$fFoldableVarDecl$fTraversableVarDecl$fShowCatchClause$fDataCatchClause$fEqCatchClause$fOrdCatchClause$fFunctorCatchClause$fFoldableCatchClause$fTraversableCatchClause$fShowCaseClause$fDataCaseClause$fEqCaseClause$fOrdCaseClause$fFunctorCaseClause$fFoldableCaseClause$fTraversableCaseClause$fShowJavaScript$fDataJavaScript$fEqJavaScript$fOrdJavaScript$fFunctorJavaScript$fFoldableJavaScript$fTraversableJavaScript HasAnnotation getAnnotation setAnnotationremoveAnnotations reannotateaddExtraAnnotationFieldremoveExtraAnnotationFieldassignUniqueIdswithAnnotation$fHasAnnotationId$fHasAnnotationCatchClause$fHasAnnotationCaseClause$fHasAnnotationProp$fHasAnnotationVarDecl$fHasAnnotationLValue$fHasAnnotationStatement$fHasAnnotationExpression$fEnumerableAssignOp$fEnumerableInfixOp$fEnumerableUnaryAssignOp$fEnumerablePrefixOp$fEnumerableId$fEnumerableCaseClause$fEnumerableCatchClause$fEnumerableProp$fEnumerableLValue$fEnumerableForInit$fEnumerableForInInit$fEnumerableVarDecl$fEnumerableExpression$fEnumerableStatementFixablefixUp LabelSubstcshrinkemptyStmtShrinkemptyConstantPool fixLValue fixUpFunExpr fixUpListExpr fixUpFunStmtidentifierFixupidentifierNameFixupfixBreakContinue rChooseElemselectRandomElement isSwitchStmt$fFixableLValue $fFixableProp $fFixableId$fFixableVarDecl$fFixableForInInit$fFixableForInit$fFixableCatchClause$fFixableCaseClause$fFixableStatement$fFixableExpression$fFixableJavaScript$fArbitraryJavaScript$fArbitraryStatement$fArbitraryVarDecl$fArbitraryCatchClause$fArbitraryForInit$fArbitraryForInInit$fArbitraryExpression$fArbitraryLValue$fArbitraryProp$fArbitraryCaseClause $fArbitraryId$fArbitraryPrefixOp$fArbitraryUnaryAssignOp$fArbitraryInfixOp$fArbitraryAssignOp$fEnumerableJavaScriptscriptidentpropIdpropSpropNlvarldotlbrackstringregexpnumberboolintnull_arrayobjectthisvardotbracknewprefixlnotbnotplusminustypeofvoiddeleteuassignpreincpredecpostincpostdecinfixeltlegtgein_ instanceofeqneqsteqstneqlandlormuldivmodsublshiftsrshiftzrshiftbandborxoraddcondassignopassign assignadd assignsub assignmul assigndiv assignmod assignlshift assignsrshift assignzrshift assignband assignxor assignborlistcallfunclambdacaseedefaultccatchvardeclvarinitblockemptyexprifteiftswitchwhiledowhilebreakcontinuelabelforinfortrytrycatch tryfinallytrycatchfinallythrowreturnsretwithvardeclsfunction id2stringlv2ee2lv forInInit2lv$fIsStringExpression$fIsStringLValue$fIsStringProp $fIsStringIdPPppPretty prettyPrintunsafeInExprStmt javaScriptrenderStatementsrenderExpression$fPPa $fPrettyId $fPrettyProp$fPrettyPrefixOp$fPrettyAssignOp$fPrettyInfixOp$fPrettyCaseClause$fPrettyVarDecl$fPrettyLValue$fPrettyForInInit$fPrettyForInit$fPrettyCatchClause$fPrettyStatement$fPrettyExpression $fPretty[]$fPrettyJavaScriptjsDiffParseridentifierStart identifierreservedoperator reservedOp charLiteral stringLiteralsymbol whiteSpaceparensbracessquaressemicommacolonbracketslexeme decIntLit decDigitsOpt decDigits hexIntLit exponentPartdecLitExpressionParserStatementParserParsedExpressionParsedStatementparseBlockStmtparseStatement statementparseObjectLitparseSimpleExpr' assignExprparseExpression expression parseScriptprogramparseFromString parseFromFileparseJavaScriptFromFileparseScriptFromString parseStringjsexprjsstmtjsLabel EmptyLabelannotateLabelSets $fOrdLabel $fEqLabel $fShowLabel $fDataLabelEnvTreeenv localVarsghc-prim GHC.TypesTruebaseGHC.BaseString checkStmt checkStmtM iterCommon checkCaseM checkCatchM bracketStatemodifyLabelSetGHC.Showshow#wl-pprint-1.2-vwckLL5t2FClxfwVCdWi9Text.PrettyPrint.LeijenDoc parenListprintIdentifierName regexpEscapeppRelationalExpressionisIfindentedinBlockasBlockppBlock ppVarDecljsEscapeppPrimaryExpressionppMemberExpressionppCallExpression ppObjInDotRef ppArgumentsppLHSExpressionppPostfixExpressionppUnaryExpression prefixSpaceppMultiplicativeExpressionppAdditiveExpressionppShiftExpressionppEqualityExpressionppBitwiseANDExpressionppBitwiseXORExpressionppBitwiseORExpressionppLogicalANDExpressionppLogicalORExpressionppConditionalExpressionppAssignmentExpression ppExpressionmaybe ParserStateidentifierStartCharSetidentifierRestCharSetidentifierRest javascriptDeflexmarrinitialParserStatepopLabel clearLabelswithFreshLabelStack parseIfStmtparseSwitchStmtparseWhileStmtparseDoWhileStmtparseContinueStmtparseBreakStmtparseEmptyStmtparseLabelledStmtparseExpressionStmtparseForInStmt parseForStmt parseTryStmtparseThrowStmtparseReturnStmt parseWithStmt parseVarDeclparseVarDeclStmtparseFunctionStmt parseThisRef parseNullLit parseBoolLit parseVarRef parseArrayLit parseFuncExpr escapeChars allEscapesparseEscapeCharparseAsciiHexCharparseUnicodeHexChar isWhitespaceparseStringLit'parseStringLitparseRegexpLithexdecimal wrapReadS parseNumber parseNumLitwithPosdotReffuncApp bracketRefparseParenExprparseExprForNew parseNewExprparseSimpleExprparseSimpleExprForNew makeInfixExprparsePrefixedExpr exprTableparseExpression'asLValuelvalueunaryAssignExprparseTernaryExpr'parseTernaryExprassignOp parseListExpr quoteJSExpr quoteJSStmtquoteJS quoteCommonannotateStatementannotateFuncStmtBodiesannotateFuncExprBodiesid2LabelPartial partialLocalspartialReferences partialNestedrefdeclnestunions javascript caseClause catchClausevarDeclforInit forInInitstmt makeEnvTree