8+.@      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ experimentalgershomb@gmail.com6Things that can be marshalled into javascript values. 0 Instantiate for any necessary data structures. 5Compos and ops for generic traversal as defined over  the JMacro ADT. 1Union type to allow regular traversal by compos. :Utility class to coerce the ADT into a regular structure.  Identifiers Values  Expressions ( Statements ;IGiven an optional prefix, fills in all free variable names with a supply # of names generated by the prefix. <9Apply a transformation to a fully saturated syntax tree, C taking care to return any free variables back to their free state ? following the transformation. As the transformation preserves ! free variables, it is hygienic. =4Render a syntax tree as a pretty-printable document 4 (simply showing the resultant doc produces a nice,  well formatted String). >>Create a new anonymous function. The result is an expression.  Usage:  jLam $   x y -> {JExpr involving x and y} ?5Introduce 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} @Create a for in statement.  Usage:  jForIn {expression} $ x -> {block involving x} AAs with jForIn but creating a " for each in" statement. H  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH    '&%$#"!  !"#$%&'( 543210/.-,+*))*+,-./0123456789:;<=>?@ABCDEFG experimentalgershomb@gmail.comH.QuasiQuoter for a block of JMacro statements. I%QuasiQuoter for a JMacro expression. 4Traverse a syntax tree, replace an identifier by an # antiquotation of a free variable.  Don'9t replace identifiers on the right hand side of selector  expressions. HIHIfJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~dh]gfedcba`_^Z\[NOPQRSTUVWXYiMjklmnopqrstuvwxyz{|}~LJKdJKKLMN OPQRSTUVWXYOPQRSTUVWXYZ\[[\] gfedcba`_^^_`abcdefghijklmnopqrstuvwxyz{|}~ experimentalgershomb@gmail.comI  !"#$%&'()*+,-./012345789:;<=>?@ABCDEFGHIJHI(543210/.-,+*)'&%$#"!  789:<=>?B@A6GCDEF;      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ jmacro-0.1.2Language.Javascript.JMacro Language.Javascript.JMacro.TypedLanguage.Javascript.JMacro.UtilLanguage.Javascript.JMacro.BaseLanguage.Javascript.JMacro.QQToStattoStatToJExprtoJExprtoJExprFromListJsToDocjsToDocComposcompos MultiCompMIdentMValMExprMStatJMacrotoMCfromMCIdentStrIJValUnsatValJFuncJHashJRegExJStrJIntJDoubleJListJVarJExprAntiExpr UnsatExprApplExprNewExprIfExprPostExpr InfixExprIdxExprSelExprValExprJStat BreakStatAntiStat UnsatBlock AssignStatPostStatApplStat BlockStat SwitchStat ForInStat WhileStatIfStat ReturnStatDeclStat expr2statcomposOp composOpM composOpM_ composOpFold jsSaturate withHygienerenderJsjLamjVarjForIn jForEachInjForjhEmptyjhSinglejhAdd jhFromListnullStatjmacrojmacroE JTypeCheck typecheck JMonadCloneJMonadTCStateTCStc_envtc_vars tc_constrstc_recs tc_scopedSattc_varCt tc_strictnull tc_canextendtc_debug tc_expandFreeJConstrSuperSubJTypeJTVarBotOfJTSatJTStatJTListJTFuncJTRecJTBoolJTStrJTNum runTypecheck tcStateEmptyorElse lookupEnvErrwithLocalScopewithLocalScope' inConditionaladdEnv addTopEnvnewVnewVarnewSat addNewSat addNewVar newTopSatkillSats newSatAtScope satInScopeincScope bumpScopegetRecputRec recLookupnewRec unzipConstrs zipConstrslookupConstraints addConstraint chkNoNullshowType prettyType prettyType' resolveType resolveStateifDbg traceSats traceVars traceConstrstyErr1tyErr2tyErr2ltraceTytraceTys<:subtype occursCheck<=.==.=addSubfindSub traceSubstraceCclone cloneManyclone''clone' substituteresCresC' simplifyCs simplifyC\/lubluball/\glbglball typecheckLhsappFuntypecheckAnnotated.<>=:$$$==!=<&&nullnewif'ifElsewhilereturn toJExprListjsvjstr antiIdentunifygetBot