aGMW      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     r!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ A script in  script ...  /script& tags. This may seem a little silly, F but the Flapjax analogue has an inline variant and attribute-inline  variant. r!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~rCXWVUTSRQPONMLKJIHGFED@BA!43210/.-,+*)('&%$#"w~}|{zyx>?<=jvutsrqponmlk`ihgfedcba]_^Y\[Z8;:9576r!43210/.-,+*)('&%$#""#$%&'()*+,-./01234576678;:99:;<==>??@BAABCXWVUTSRQPONMLKJIHGFEDDEFGHIJKLMNOPQRSTUVWXY\[ZZ[\]_^^_` ihgfedcbaabcdefghij vutsrqponmlkklmnopqrstuvw~}|{zyxxyz{|}~ -      9 makes writing pretty-printing code for large, recursive  data structures shorter. We make  an instance of  so that we can use it with  generics. This definition is incomplete. =These definitions allow us to use data structures containing   values with generics. We make  an instance of  so that we can use it with  generics. A type t of the  class can be parsed using Parsec. t is of  kind '* -> *'=, as the parsed AST should be annotated with souce locations  (see ). MThe big deal here is that we can embed a parser for some scripting language, L (e.g. Javascript) into this HTML parser with ease, while preserving source I locations. The Html datatype is parameterized over a script parser (an  instance of Script). must be a non-empty list 3Returns the value of the attribute in the list, or   if it doesn't - exist of the value is an inline-expression.  <!IAn HTML fragment represents an HTML element with a sequence of children. "#$%&'()*+,-./012345678&List of HTML elements that are empty. 9:;<=GWe do not permit spaces between the hyphens and the right-angle in the  terminating -->. >?@ABCDEFGHIJKLMNOPQRSTUVWX !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Y"Returns the source of the script. ZMReturns a list of URIs for external Javascript files referenced in the page. [.Returns the top-level statements of a script. \]^_`LGiven an HTML page, crawls all external Javascript files and returns a list - of statements, concatenated from all files. ,abcdtransforms a node v using the accumulated  value w from the root of the tree to v 1the initial value of the accumulator at the root  Similar to ., but the transformation is done in the monad m. The 7 sequence of operations is depth-first, left-to-right. e"Traverses to the top of the tree.   up.top = undefined  top.top = top @Creates a new node as the right-most child of the current node. #value of the new right-most child &computation applied to the new child -returns the result of the nested computation +computation to apply to the current child "returns the result of the nested  computation :Silently fails to shift right if there is no right-child. 8Silently fails to shift left if there is no left-child. fg))% %hijklmnopqrstuvwxyz{|}~EAnnotates each expression with its static environment. In addition, I a map of free identifiers is returned, along with the next valid label. !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWXXYZY[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                   !"#$%&'()*+,-./012345 6 7 8 9 : ; < =  > ?  @ A B  C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p qrstuvw x y z { | } ~                         WebBits-0.11.0WebBits.CommonWebBits.Data.ZipperWebBits.Html.RawScriptWebBits.JavaScript.LexerWebBits.JavaScript.SyntaxWebBits.JavaScript.ParserWebBits.JavaScript.CombinatorsWebBits.Html.SyntaxWebBits.Html.PermissiveParser WebBits.JavaScript.HtmlEmbeddingWebBits.JavaScript.CrawlWebBits.JavaScript.EnvironmentWebBits.JavaScript.InstancesWebBits.JavaScript.PrettyPrintWebBits.Html.PrettyPrintWebBits.Html.InstancesWebBits.JavaScript.JavaScriptWebBits.Html.HtmlWebBits.JavaScriptbase Data.List isPrefixOfcontainers-0.3.0.0 Data.Tree subForest rootLabelNodeTreeparsec-2.1.0.1"Text.ParserCombinators.Parsec.Prim parseFromFile!Text.ParserCombinators.Parsec.Pos sourceName SourcePosidentifierStart identifierreservedoperator reservedOp charLiteral stringLiteralnaturalintegerfloatnaturalOrFloatdecimal hexadecimaloctalsymbol whiteSpaceparensbracessquaressemicommacolondotbracketslexeme Statement FunctionStmt VarDeclStmtWithStmt ReturnStmt ThrowStmtTryStmtForStmt ForInStmt LabelledStmt ContinueStmt BreakStmt DoWhileStmt WhileStmt SwitchStmt IfSingleStmtIfStmtExprStmt EmptyStmt BlockStmt ForInInit ForInNoVarForInVarForInitExprInitVarInitNoInitVarDecl CatchClause CaseClause CaseDefault ExpressionFuncExprCallExprListExpr ParenExpr AssignExprCondExpr InfixExpr PrefixExpr PostfixExprNewExpr BracketRefDotRefVarRefThisRef ObjectLitArrayLitNullLitBoolLitNumLit RegexpLit StringLitPropPropNum PropStringPropId PostfixOp PostfixDec PostfixIncPrefixOp PrefixDelete PrefixVoid PrefixTypeof PrefixMinus PrefixPlus PrefixBNot PrefixLNot PrefixDec PrefixIncAssignOp OpAssignBOr OpAssignBXor OpAssignBAndOpAssignZfRShiftOpAssignSpRShiftOpAssignLShift OpAssignMod OpAssignDiv OpAssignMul OpAssignSub OpAssignAddOpAssignInfixOpOpAddOpBOrOpBXorOpBAnd OpZfRShift OpSpRShiftOpLShiftOpSubOpModOpDivOpMulOpLOrOpLAnd OpStrictNEq OpStrictEqOpNEqOpEq OpInstanceofOpInOpGEqOpGTOpLEqOpLTId JavaScriptScriptExpressionParserStatementParserParsedExpressionParsedStatementparseBlockStmtparseStatementparseSimpleExpr'parseAssignExprparseExpression parseScriptparseJavaScriptFromFileparseScriptFromStringemptyParsedJavaScript parseStringPrettyPrintableppscriptStatements isParenExprsyntaxAt expressionsAt statementsAtparseScriptBlockparseInlineScriptparseAttributeScriptHtml InlineScriptProcessingInstructionHtmlSeqCommentTextElement Attribute AttributeExprAttributeValueHtmlIdisAttributeExprattributeValue attributeSetattributeUpdateTokentokenshtmlparseHtmlFromStringparseHtmlFromFile ParsedJsHtmlParsedJavaScriptJsHtmlgetPageJavaScript RawScriptRawHtmlparseFromStringZipperTLocationdfsFolddfsFoldMshowTreeemptyupdownleftrightreplacechange insertDown insertLeft insertRightisTopisChild canGoRight canGoDown canGoLeftcanGoUpgetValuesubTreetop toLocation fromLocation runZipperT evalZipperT execZipperTnestgetNodesetNodewithCurrentChild shiftRight shiftLeft shiftRight' shiftLeft'LabelledExpressionLabelledStatementAnnEnvstaticEnvironmentyfoldrlfoldr ltraverse ytraverse parseIfStmtparseSwitchStmtparseWhileStmtparseDoWhileStmtparseContinueStmtparseBreakStmtparseEmptyStmtparseLabelledStmtparseExpressionStmtparseForInStmt parseForStmt parseTryStmtparseThrowStmtparseReturnStmt parseWithStmtparseVarDeclStmtparseFunctionStmt parseThisRef parseNullLit parseBoolLit parseVarRef parseArrayLit allEscapesparseStringLitparseRegexpLitparseObjectLit mkDecimal parseNumLitparseParenExpr exprTableparseTernaryExpr'parseTernaryExpr assignTable$fDataSourcePos Data.TypeableTypeable$fTypeableSourcePosinBlockinParenscommaSepjsEscape Data.MaybeNothing HtmlFragmentFragmentfragmentPosition fragmentNamefragmentAttributesfragmentChildren TokenParser DoctypeTokenEndTagInlineTag EntityInt EntityTokenWarning StringWarningParsedAttribute ParsedHtmlwarn noWarningsparentConstraints emptyElementsisLegalChildOfisEmptyElementtokenqnamecommentendTagdoctypeentity notScripttext quotedString scriptValuenumbernonquotedAttribute attributetag inlineScript textToken entityToken commentToken scriptToken inlineTokenendTokentagToken doctypeToken closeFragmentatomic maybeCloseopenhtml'htmlWithWarnings scriptSrcimportedScripts scriptText eventHandlers attrScriptinpageAttrScripts inpageScriptsgetPageJavascriptPathSplitTopinsertDownRighthasLefthasRightRefM PartialEnvthisStmtthisExpr removeParensremoveSingletons explicitThisemptyPartialEnv nextLabelbinduse buildExprbuildCatchClause buildVarDeclbuildForInInit buildStmt buildAny'buildAny resolveFreeId completeEnvM' completeEnvMinsertEmptyAnnlocOflabelEnvlabelId labelIdNoVar labelProp labelVarDecl labelExpr labelStmt labelAny'labelAny