code: function (env, op, other) {
          var result = [];
  
          if (! (other instanceof tree.Color)) {
              other = other.toColor();
          }
  
          for (var c = 0; c < 3; c++) {
              result[c] = tree.operate(env, op, this.rgb[c], other.rgb[c]);
          }
          return new(tree.Color)(result, this.alpha + other.alpha);
      }
docs: Operations have to be done per-channel, if not, channels will spill onto each other. Once we have our result, in the form of an integer triplet, we create a new Color node to hold the result.