text: /*
  by James Long
  Source: https://github.com/jlongster/es6-macros/blob/master/macros/fat-arrow.sjs
  */
  
  macro bind_args {
    case { $ctx $args $body ... } => {
      var stx = #{ $body ... };
      var args = #{ $args };
  
      function walk(stx) {
        for(var i=0; i<stx.length; i++) {
          var s = stx[i];
          if(s.token.type === parser.Token.Delimiter) {
            walk(s.token.inner);
          }
          else if(s.token.value === 'function') {
            var expr = getExpr(stx.slice(i));
            walk(expr.rest);
            break;
          }
          else if(s.token.type === parser.Token.Identifier &&
                  s.token.value === 'arguments' &&
                  (i === 0 || stx[i-1].token.value !== '.')) {
            s.token.value = '__fa_args';
          }
        }
      }
  
      walk(stx);
      return stx;
    }
  }
  
  macro => {
    case infix { ($arg (,) ...) | $ctx {$body ...} } => {
      letstx $args = [makeIdent('__fa_args', #{$ctx})];
      return #{
        function($args, $arg (,) ...) {
          bind_args $args $body ...
        }.bind(this, typeof arguments !== "undefined" ? arguments : undefined)
      }
    }
    case infix { $arg:ident | $ctx {$body ...} } => {
      letstx $args = [makeIdent('__fa_args', #{$ctx})];
      return #{
        function($args, $arg) {
          bind_args $args $body ...
        }.bind(this, typeof arguments !== "undefined" ? arguments : undefined)
      }
    }
    case infix { ($arg (,) ...) | $ctx $guard:expr } => {
      letstx $args = [makeIdent('__fa_args', #{$ctx})];
      return #{
        function ($args, $arg (,) ...) {
          return bind_args $args $guard;
        }.bind(this, typeof arguments !== "undefined" ? arguments : undefined)
      }
    }
    case infix { $arg:ident | $ctx $guard:expr } => {
      letstx $args = [makeIdent('__fa_args', #{$ctx})];
      return #{
        function($args, $arg) {
          return bind_args $args $guard;
        }.bind(this, typeof arguments !== "undefined" ? arguments : undefined)
      }
    }
  }
  
  export =>
  