śĪUčF¾¼      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ» ¼¼¼ ½¾ æĄĮĀĆÄÅĘĒČ      experimentalgershomb@gmail.comb6Things 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 )*+,-./012 Expressions 3456789:;<=> Statements ?@ABCDEFGHIJKLMNOPĪĻŠQRSTUVIGiven an optional prefix, fills in all free variable names with a supply # of names generated by the prefix. ŃŅÓW9Apply 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 8 free variables, it is hygienic. Cannot be used nested. XaTakes a fully saturated expression and transforms it to use unique variables that respect scope. Y4Render a syntax tree as a pretty-printable document 4 (simply showing the resultant doc produces a nice,  well formatted String). ZŌ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. ŌÕ[>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} ]HIntroduce 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} ^Create a for in statement.  Usage:  jForIn {expression} $ x -> {block involving x} _As with jForIn but creating a " for each in" statement. `abcdefghÖT !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghT"!  !"#$%$%&''( 10/.-,+*))*+,-./012 =<;:98765433456789:;<=>MLKJIHGFEDCBA@??@ABCDEFGHIJKLMNOPOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyijklmnopqrstuvwxyijklmnqporstuvwxyijklmnopqrstuvwxy  experimentalgershomb@gmail.com?×ŲŁŚŪÜŻz.QuasiQuoter for a block of JMacro statements. {%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. ćäåęēčéźėģķīļšńņóōõö|÷ųłśūüżž’     z{|z{| experimentalgershomb@gmail.com}XThis 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. }}}3~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°F~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤ „¦§!"Ø©Ŗ«¬­®#ư$%3Ž‘ŠŒ‹‚ƒ„…†‡ˆ‰€~’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°3~€‚ƒ„…†‡ˆ‰ƒ„…†‡ˆ‰ŠŒ‹‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ° experimentalgershomb@gmail.com±²³“µeEither a success or failure (with code). Generally would be turned back into a proper HTTP response. ¶·ø—A String containing a json representation of function arguments encoded as a list of parameters. Generally would be passed as part of an HTTP request. ¹&'(ŗIProduce a pair of (ServerFunction, ClientFunction) from a function in IO )»id with a helpful type. ±²³“µ¶·ø¹ŗ» ŗ»øµ·¶¹±²³“ ±²²³““µ·¶¶·ø¹ŗ» experimentalgershomb@gmail.comd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPRSTUVWXYZ[\]^_`abcdefghz{|}Wz{|>MLKJIHGFEDCBA@?2=<;:9876543(10/.-,+*)&'NOP#$%"! RSTUWXYZa[\]b^_`QhcdefVg*     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ „ … †‡ˆ‰ŠŠ‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌŌÕÖ×ŲŁŚŪÜŻŽ ß ą į ā ć ä å ę ē č é ź ė ģ ķ ī ļ š ń ņ ó ō õ ö ÷ ų ł ś ū ü ż ž ’                            !"#$%&'()*+,-./012 jmacro-0.5.2 Language.Javascript.JMacro.TypesLanguage.Javascript.JMacroLanguage.Javascript.JMacro.Util"Language.Javascript.JMacro.Prelude$Language.Javascript.JMacro.TypeCheckLanguage.Javascript.JMacro.Rpc"Language.Javascript.JMacro.ParseTHLanguage.Javascript.JMacro.BaseLanguage.Javascript.JMacro.QQ JLocalType ConstraintSuperSubJTypeJTForallJTFree JTImpossibleJTRigidJTRecordJTMapJTListJTFuncJTStatJTBoolJTStringJTNumVarRef parseType runTypeParseranyTypeToStattoStatToJExprtoJExprtoJExprFromListJsToDocjsToDocComposcompos MultiCompMIdentMValMExprMStatJMacrotoMCfromMCIdentStrIJValUnsatValJFuncJHashJRegExJStrJIntJDoubleJListJVarJExprTypeExprAntiExpr UnsatExprApplExprNewExprIfExpr PPostExpr InfixExprIdxExprSelExprValExprJStat BreakStat ForeignStatAntiStat UnsatBlock AssignStat PPostStatApplStat BlockStatTryStat SwitchStat ForInStat WhileStatIfStat ReturnStatDeclStat IdentSupplyISrunIdentSupply expr2statcomposOp composOpM composOpM_ composOpFold jsSaturate withHygienescopifyrenderJsrenderPrefixJsjLamjVarjVarTyjForIn jForEachInjTryCatchFinallyjsvjForjhEmptyjhSinglejhAdd jhFromList jtFromListnullStat.<>=:$$$==!=<&&nullnewif'ifElsewhilereturn toJExprListjstrjmacrojmacroEparseJM jmPrelude JTypeCheck typecheckTMonadTCStateTCStc_envtc_varstc_stack tc_frozentc_varCt tc_contextStoreVal SVConstrainedSVType partitionOutzipWithOrChange zipWithOrIdM unionWithMintersectionWithM withContext traversem_freeVarsWithNamestyErr0tyErr1 tyErr2ext tyErr2Sub prettyEnv newVarRefnewTyVar mapConstraintlookupConstraintsListinstantiateVarRef occursCheckcheckConstraints addConstrainttryCloseFrozenVarswithLocalScope setFrozenaddEnv newVarDeclresolveTypeGenintegrateLocalType lookupEnvfreeVarsinstantiateSchemeinstantiateRigidSchemecheckEscapedVars<:someUpperBoundsomeLowerBound CallWebRPC callWebRPC_ToWebRPC toWebRPC_Response BadResponse GoodResponseRequest WebRPCDescmkWebRPCasIO parseHSExp TypeParserTypeParserStatetypLangwithLocalStateconstrainedTypeconstraintHead funOrAtomTypelistType anyNestedType atomicType recordType freeVarRefToSattoSat_CunCtakeOnenewIdentSupplysat_ jsSaturate_ jsReplace_jsUnsat_ braceNest braceNest'encodeJsonChar PatternTreePTVarPTObjPTListPTConsPTAsJMParser quoteJMPat quoteJMExp quoteJMPatE quoteJMExpE antiIdent antiIdentsfixIdentjm2thlexerjsLangidentifierWithBang whiteSpacesymbolparensbracesdotcolonsemi identifierreserved reservedOp commaSep1commaSeplexeme<*parseJMEgetType addForcedType varidentdecl identdecl cleanIdent patternTreepatternBinding patternBlocks statblock statblock0l2sstatementOrEmpty statementexprdotExpr dotExprOnefolBy brackets'braces'parens' oxfordBracesaround'myIdentident'natFloatmyStringLiteral regexLiteralisLeft tcStateEmpty evalTMonad runTMonad prettyTyperunTypecheckRawrunTypecheckFull runTypecheck evalTypecheck typecheckMain addToStack partitionCscannonicalizeConstraints frame2VarRefs resolveTyperesolveTypeShallow<<:>=.=typecheckWithBlock returnResptoWebRPC callWebRPC testRPCCall