I was going to rebut your decision, but I think you're right. If the promise's `then()` didn't type check, it would need to pass the new Promise's `resolve` and `reject` functions to the Resolver of the current Promise. That would extend the signature of the `addCallbacks` or require it to work in a different way. Maybe that would be a good thing, maybe bad, maybe it wouldn't matter?

This reminds me of Crock's implementation where instead of the `addCallbacks`-like function (`enqueue`) being passed both fulfill and reject handlers, it was passed the name of the queue (e.g. 'fulfill' or 'reject', in his implementation 'keepers' or 'breakers'), a single callback (optional), and (effectively) the resolver of the new promise. 
https://github.com/douglascrockford/monad/blob/master/vow.js