code: function flattenAdditive(left, right) {
      var result = [];
  
      // Since .pop is faster than .shift we'll pop tasks from the end.
      var todo = [right, left];
      while (todo.length > 0) {
          match(todo.pop(), function(when) {
              when({
                  type: 'BinaryExpression',
                  operator: match.some('+', '-'),
                  left: match.var('left'),
                  right: match.var('right')
              }, function(vars) {
                  todo.push(vars.right, vars.left);
              });
  
              when(match.var('operand'), function(vars) {
                  result.push(vars.operand);
              });
          });
      }
  
      return result;
  }
docs: (Expression, Expression) -> [Expression]