export class MutableValue { private inner: T; constructor(inner: T) { this.inner = inner; } get value() { return this.inner } public deriveNew(mutator: (self: T) => T): MutableValue { this.inner = mutator(this.inner); return new MutableValue(this.inner); } }