]xJ1      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NoneNone*+234,     (c) Gershom Bazerman, 2009 BSD 3 Clausegershomb@gmail.com experimentalNone!"*+234=BHKMeThings that can be marshalled into javascript values. Instantiate for any necessary data structures.0Union type to allow regular traversal by compos.#ECompos and ops for generic traversal as defined over the JMacro ADT.9Utility class to coerce the ADT into a regular structure.& Identifiers*Values4 ExpressionsA Statements[kGiven an optional prefix, fills in all free variable names with a supply of names generated by the prefix.\Apply a transformation to a fully saturated syntax tree, taking care to return any free variables back to their free state following the transformation. As the transformation preserves free variables, it is hygienic.]`Takes a fully saturated expression and transforms it to use unique variables that respect scope.^Render a syntax tree as a pretty-printable document (simply showing the resultant doc produces a nice, well formatted String)._Render a syntax tree as a pretty-printable document, using a given prefix to all generated names. Use this with distinct prefixes to ensure distinct generated names between independent calls to render(Prefix)Js.`GCreate a new anonymous function. The result is an expression. Usage: (jLam $ x y -> {JExpr involving x and y}a|Introduce a new variable into scope for the duration of the enclosed expression. The result is a block statement. Usage: (jVar $ x y -> {JExpr involving x and y}bIntroduce a new variable with optional type into scope for the duration of the enclosed expression. The result is a block statement. Usage: (jVar $ x y -> {JExpr involving x and y}c$Create a for in statement. Usage: .jForIn {expression} $ x -> {block involving x}d8As with "jForIn" but creating a "for each in" statement. !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm      !"#$%&'()*+,-./0123456789:;<Y !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn"! #$%&'()* 3210/.-,+4 ?>=<;:98765@ARQPONMLKJIHGFEDCBSTUVWXYZ[\]^_`abcdefghijklm      !"#$%&'()*+,-./0123456789:;<Nonenopqrstuvwxyz{|}~nopqrstuvwxyz{|}~nopqrsvutwxyz{|}~nopqrstuvwxyz{|}~puvNone234BFHMUOUG(c) Gershom Bazerman, 2009 BSD 3 Clausegershomb@gmail.com experimentalNone!"24=HKM-QuasiQuoter for a block of JMacro statements.$QuasiQuoter for a JMacro expression.=Traverse a syntax tree, replace an identifier by an antiquotation of a free variable. Don't replace identifiers on the right hand side of selector expressions.B>?@ABCDEFGH=IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz=>CBA@?DEFGH=IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz'(c) Gershom Bazerman, Jeff Polakow 2010 BSD 3 Clausegershomb@gmail.com experimentalNoneThis provides a set of basic functional programming primitives, a few utility functions and, more importantly, a decent sample of idiomatic jmacro code. View the source for details.(c) Gershom Bazerman, 2010 BSD 3 Clausegershomb@gmail.com experimentalNonej  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUWXYZ[\]^_`abcdefghijklm]ARQPONMLKJIHGFEDCB4?>=<;:98765*3210/.-,+&'STU@#$%"! WXYZ\]^_f`abgcdeVmhijk[l(){      !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~z      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu jmacro-0.6.13 Language.Javascript.JMacro.TypesLanguage.Javascript.JMacroLanguage.Javascript.JMacro.Util$Language.Javascript.JMacro.TypeCheck"Language.Javascript.JMacro.Prelude"Language.Javascript.JMacro.ParseTHLanguage.Javascript.JMacro.BaseLanguage.Javascript.JMacro.QQ JLocalType ConstraintSuperSubJTypeJTForallJTFree JTImpossibleJTRigidJTRecordJTMapJTListJTFuncJTStatJTBoolJTStringJTNumVarRef parseType runTypeParseranyTypeToStattoStatToJExprtoJExprtoJExprFromListJsToDocjsToDocComposcomposJMGadtJMGValJMGExprJMGStatJMGIdJMacrojtoGADT jfromGADTIdentStrI SaneDoubleJValUnsatValJFuncJHashJRegExJStrJIntJDoubleJListJVarJExprTypeExprAntiExpr UnsatExprApplExprNewExprIfExpr PPostExpr InfixExprIdxExprSelExprValExprJsLabelJStat ContinueStat BreakStat LabelStat ForeignStatAntiStat UnsatBlock AssignStat PPostStatApplStat BlockStatTryStat SwitchStat ForInStat WhileStatIfStat ReturnStatDeclStat IdentSupplyISrunIdentSupply expr2statcomposOp composOpM composOpM_ composOpFold jsSaturate withHygienescopifyrenderJsrenderPrefixJsjLamjVarjVarTyjForIn jForEachInjTryCatchFinallyjsvjForjhEmptyjhSinglejhAdd jhFromList jtFromListnullStat.<>=:$$$==!=<&&nullnewif'ifElsewhilereturn toJExprListjstr JTypeCheck typecheckTMonadTCStateTCStc_envtc_varstc_stack tc_frozentc_varCt tc_contextStoreVal SVConstrainedSVTypeCunCCompos1compos1 eitherIsLeft partitionOutzipWithOrChange zipWithOrIdM unionWithMintersectionWithM composOp1 composOpM1 composOpM1_ composOpFold1 tcStateEmpty evalTMonad runTMonad withContext traversem_freeVarsWithNames prettyTypetyErr0tyErr1 tyErr2ext tyErr2Sub prettyEnvrunTypecheckRawrunTypecheckFull runTypecheck evalTypecheck typecheckMain addToStack newVarRefnewTyVar mapConstraint partitionCslookupConstraintsListinstantiateVarRef occursCheckcheckConstraints addConstraintcannonicalizeConstraintstryCloseFrozenVarswithLocalScope setFrozen frame2VarRefsaddEnv newVarDeclresolveTypeGen resolveTyperesolveTypeShallowintegrateLocalType lookupEnvfreeVarsinstantiateSchemeinstantiateRigidSchemecheckEscapedVars<:<<:>someUpperBoundsomeLowerBound=.=typecheckWithBlock$fJTypeCheckJStat$fJTypeCheckJVal$fJTypeCheckJExpr$fApplicativeTMonad $fShowTCState$fCompos1JTypejmacrojmacroEparseJMparseJME jmPrelude parseHSExp TypeParserTypeParserStatetypLanglexerparensbracesbrackets identifier reservedOp commaSep1commaSeplexemeparseConstrainedTypewithLocalStateconstrainedTypeconstraintHead funOrAtomTypelistType anyNestedTypenullType atomicType recordType freeVarRefToSattoSat_$+$$$$ inIdentSupplytakeOnenewIdentSupplysat_jmcompos jsSaturate_ jsReplace_jsUnsat_ withHygiene_ braceNest braceNest' flattenBlocks optParensppConstraintListppRefppType encodeJsonencodeJsonChar$fToJExprValue $fToStat[] $fToStatJExpr $fToStat[]0 $fToStatJStat $fNumJExpr$fToJExpr(,,,,,)$fToJExpr(,,,,)$fToJExpr(,,,) $fToJExpr(,,) $fToJExpr(,) $fToJExprText$fToJExprText0 $fToJExprChar$fToJExprInteger $fToJExprInt$fToJExprDouble $fToJExprMap $fToJExprJVal $fToJExprBool $fToJExpr()$fToJExprJExpr $fToJExpr[] $fJsToDoc(,)$fJsToDocJType $fJsToDoc[] $fJsToDoc[]0$fJsToDocIdent $fJsToDocJVal$fJsToDocJExpr$fJsToDocJStat $fToSat(->) $fToSat[] $fToSatJExpr $fToSatJStat $fToSat[]0$fComposJMGadt $fJMacroJVal $fJMacroJExpr $fJMacroJStat $fJMacroIdent$fShowSaneDouble$fOrdSaneDouble$fEqSaneDouble $fMonoidJStat$fShowIdentSupply$fOrdIdentSupply$fEqIdentSupply$fFunctorIdentSupply$fDataIdentSupply antiIdent PatternTreePTVarPTObjPTListPTConsPTAsJMParser quoteJMPat quoteJMExp quoteJMPatE quoteJMExpE antiIdentsfixIdentjm2thjsLangidentifierWithBang whiteSpacesymboldotcolonsemireserved<<*getType addForcedType varidentdecl identdecl cleanIdent patternTreepatternBinding patternBlocksdestructuringDecl statblock statblock0l2sstatementOrEmpty statement compileRegexexprdotExpr dotExprOnefolBy brackets'braces'parens' oxfordBracesaround'myIdentident'natFloatmyStringLiteral decodeJson regexLiteral