úÎO8A,Ë      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎËÌÍÎËÌÍÎ experimentalgershomb@gmail.comY6Things 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 )*+,-./0123456789:;ÔÕÖ<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 8 free variables, it is hygienic. Cannot be used nested. >aTakes a fully saturated expression and transforms it to use unique variables that respect scope. ?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} A5Introduce 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} BCreate a for in statement.  Usage:  jForIn {expression} $ x -> {block involving x} CAs with jForIn but creating a " for each in" statement. DEFGHIJKL  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL    '&%$#"!  !"#$%&'(6543210/.-,+*))*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\LMNOPQRSTUVWXYZ[\LMNOPRSTQUVWXYZ[\LMNOPQRSTUVWXYZ[\ experimentalgershomb@gmail.com0Ü].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. âãäåæçèéêëìíîïðñòóô_õö÷øùúûüýþÿ]^_]^_ 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. ```dabcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄfabcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­® ¯°±²³´µ¶·¸¹ º»¼½¾¿ÀÁÂÃÄdt~}|{zyxwvuqsrefghijklmnop€d‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®c¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁabÂÃÄdabbcde fghijklmnopfghijklmnopqsrrst ~}|{zyxwvuuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄ experimentalgershomb@gmail.com   ÅeEither a success or failure (with code). Generally would be turned back into a propre 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.comO  !"#$%&'()*+,-./012345689:;<=>?@ABCDEFGHIJK]^_`O]^_(6543210/.-,+*)'&%$#"!  89:;=>?E@AFBCD7KGHIJ<      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      jmacro-0.3.2Language.Javascript.JMacroLanguage.Javascript.JMacro.Util"Language.Javascript.JMacro.Prelude Language.Javascript.JMacro.TypedLanguage.Javascript.JMacro.Rpc"Language.Javascript.JMacro.ParseTHLanguage.Javascript.JMacro.BaseLanguage.Javascript.JMacro.QQToStattoStatToJExprtoJExprtoJExprFromListJsToDocjsToDocComposcompos MultiCompMIdentMValMExprMStatJMacrotoMCfromMCIdentStrIJValUnsatValJFuncJHashJRegExJStrJIntJDoubleJListJVarJExprAntiExpr UnsatExprApplExprNewExprIfExprPostExpr InfixExprIdxExprSelExprValExprJStat BreakStatAntiStat UnsatBlock AssignStatPostStatApplStat BlockStatTryStat SwitchStat ForInStat WhileStatIfStat ReturnStatDeclStat expr2statcomposOp composOpM composOpM_ composOpFold jsSaturate withHygienescopifyrenderJsjLamjVarjForIn jForEachInjTryCatchFinallyjsvjForjhEmptyjhSinglejhAdd jhFromListnullStat.<>=:$$$==!=<&&nullnewif'ifElsewhilereturn toJExprListjstrjmacrojmacroEparseJM jmPrelude 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 typecheckLhsappFuntypecheckAnnotatedResponse BadResponse GoodResponseRequestmkWebRPCasIO parseHSExpparseResultToEithermyDefaultParseModemyDefaultExtensionsToSattoSat_CunCsat_takeOnenewIdentSupply jsSaturate_ jsReplace_jsUnsat_ braceNest braceNest'JMParser quoteJMPat quoteJMExp quoteJMPatE quoteJMExpE antiIdent antiIdentsjm2thlexerjsLangidentifierWithBang whiteSpacesymbolparensbracesdotcolonsemi identifierreserved reservedOp commaSep1commaSeplexeme<*parseJME varidentdecl identdeclidentAssignDecl statblockl2s statementexprdotExpr dotExprOneargs' brackets'braces'parens'around'myIdentident'natFloatmyStringLiteralmyStringLiteralNoBrunifygetBot CallWebRPC_ callWebRPC_ ToWebRPC_ toWebRPC_ WebRPCDesc returnResptoWebRPC callWebRPC testRPCCall