   """
   "(if False 1 2)", 2
 
+  'currying functional macros'
+  """
+    * (macro [x y]
+      (: (Fn Num Num Num))
+      (Js.binary "*" x y))
+  """
+  "(if False 1 2)", 2
+
   # TODO: support matching with the same name
   #       to implement this we need the iife to take as arguments all variables
   #       with the same names, since JavaScript shadows it too strongly and

  operator = _operator call
  operatorName = _symbol operator
  if isName operator
    (if operatorName of ctx.macros()
      macroCompile
    else if (ctx.isDeclared operatorName) and not ctx.arity operatorName
      callUnknownCompile

        retrieve call, lambda
        compiled
      else
        compiled =
          if operator.symbol of ctx.macros()
            macroCompile ctx, sortedCall
          else
            callSaturatedKnownCompile ctx, sortedCall
        retrieve call, sortedCall
        compiled

