<div dir="ltr">I don't agree that @@species is useful at all for changing constructor signatures, since there is no closure argument.<div><br></div><div>If we had dynamically scoped variables, then:</div><div>```</div><div>  LabelledPromise[Symbol.species] = function() { return LabelledPromise.bind(label/*dynamically scoped*/); };<br></div><div>  function() {</div><div>    let label = "foo";</div><div>    return LabelledPromise.resolve(x);<br></div><div>  }</div><div>```</div><div>would indeed be very interesting.  But in the absence of some sort of closure, the only way you can make @@species into a custom constructor is for odd special cases where you are just rearranging deck chairs.</div><div><br></div><div>Why not:</div><div> ```</div><div>class LabelledPromise {</div><div>  constructor(exec, label) {</div><div>    super(exec);</div><div>    this.label = label === undefined ? "<derived promise>" : label;</div><div>  }</div><div>}</div><div>```</div><div>  --scott <br></div><div><br></div></div>