h&5#      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred5 Safe-Inferred56g  (c) Gershom Bazerman, 2009 BSD 3 Clausegershomb@gmail.com experimental Safe-Inferred")*56 !jmacroThings that can be marshalled into javascript values. Instantiate for any necessary data structures.(jmacro0Union type to allow regular traversal by compos.-jmacroCompos and ops for generic traversal as defined over the JMacro ADT.9Utility class to coerce the ADT into a regular structure.0jmacro Identifiers4jmacroValues>jmacro ExpressionsKjmacro StatementsdjmacroGiven an optional prefix, fills in all free variable names with a supply of names generated by the prefix.ejmacroApply 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.fjmacroTakes a fully saturated expression and transforms it to use unique variables that respect scope.gjmacroRender a syntax tree as a pretty-printable document (simply showing the resultant doc produces a nice, well formatted String).hjmacroRender 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.ijmacroCreate a new anonymous function. The result is an expression. Usage: (jLam $ x y -> {JExpr involving x and y}jjmacroIntroduce 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}kjmacroIntroduce 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}ljmacro$Create a for in statement. Usage: .jForIn {expression} $ x -> {block involving x}mjmacro8As with "jForIn" but creating a "for each in" statement. !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv55 Safe-Inferred 9wxyz{~}|{~}|yzwx(c) Gershom Bazerman, 2009 BSD 3 Clausegershomb@gmail.com experimental Safe-Inferred)*jmacro-QuasiQuoter for a block of JMacro statements.jmacro$QuasiQuoter for a JMacro expression.jmacroTraverse 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.'(c) Gershom Bazerman, Jeff Polakow 2010 BSD 3 Clausegershomb@gmail.com experimental Safe-InferredPjmacroThis 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 experimental Safe-Inferred  !"#$%&'(,+)*-./01234=<;:98756>IHGFEDCBA?@JK\[ZYXWVUTSRQPONLM]^_`abcdefghijklmnopqrstuv !"#$%&'(,+)*-./01234=<;:98756>IHGFEDCBA?@JK\[ZYXWVUTSRQPONLM]^_`abcdefghijklmnopqrstuv  Safe-Inferred243      !"#$%&'()*+,-./0123456789:;;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~$jmacro-0.6.18-Et7opxPEt521QVaiCM6YCv Language.Javascript.JMacro.TypesLanguage.Javascript.JMacro$Language.Javascript.JMacro.TypeCheck"Language.Javascript.JMacro.PreludeLanguage.Javascript.JMacro.Util"Language.Javascript.JMacro.ParseTHLanguage.Javascript.JMacro.BaseLanguage.Javascript.JMacro.QQ JLocalType ConstraintSubSuperJTypeJTNumJTStringJTBoolJTStatJTFuncJTListJTMapJTRecordJTRigid JTImpossibleJTFreeJTForallVarRef parseType runTypeParseranyType$fEqConstraint$fOrdConstraint$fReadConstraint$fShowConstraint$fDataConstraint $fEqJType $fOrdJType $fReadJType $fShowJType $fDataJTypeToStattoStatToJExprtoJExprtoJExprFromListJsToDocjsToDocComposcomposJMGadtJMGIdJMGStatJMGExprJMGValJMacrojtoGADT jfromGADTIdentStrI SaneDoubleJValJVarJListJDoubleJIntJStrJRegExJHashJFuncUnsatValJExprValExprSelExprIdxExpr InfixExpr PPostExprIfExprNewExprApplExpr UnsatExprAntiExprTypeExprJsLabelJStatDeclStat ReturnStatIfStat WhileStat ForInStat SwitchStatTryStat BlockStatApplStat PPostStat AssignStat UnsatBlockAntiStat ForeignStat LabelStat BreakStat ContinueStat IdentSupplyISrunIdentSupplycomposOp composOpM composOpM_ composOpFold jsSaturate withHygienescopifyrenderJsrenderPrefixJsjLamjVarjVarTyjForIn jForEachInjTryCatchFinallyjsvjForjhEmptyjhSinglejhAdd jhFromList jtFromListnullStat JTypeCheck typecheckTMonadTCStateTCStc_envtc_varstc_stack tc_frozentc_varCt tc_contextStoreValSVType SVConstrainedCunCCompos1compos1 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$fCompos1JType$fApplicativeTMonad $fShowTCState$fJTypeCheckJStat$fJTypeCheckJVal$fJTypeCheckJExpr$fFunctorTMonad $fMonadTMonad$fMonadStateTCStateTMonad$fMonadError[]TMonad$fShowStoreValjmacrojmacroEparseJMparseJME jmPrelude.<>=:$$$==!=<&&nullnewif'ifElsewhilereturn toJExprListjstr parseHSExp expr2stat$+$ antiIdent