Well, in its simplest form, it’ll probably involve some sort of “staging”, or “grouping”, and “delay” for the rollout of those changes. And we’re talking about structuring or organizing the rollout of those changes.
What we’re talking about probably includes deprecation cycles, and methods for “graceful migrations”.
What is a migration? A change from one state to another.
What is a “graceful” migration? A state transformation that minimizes the possible negative impacts of the change in state.
For example, if I am upgrading an application service from version A to version B, and if that upgrade involves an update or change for both an application and a database, there are many ways I can roll out those changes, some of which will minimize negative impacts, and others that don’t. For example, the software may be updated in a way that only supports one version of the database schema at a time, rather than both the current state and the new state… or the schema and application could be updated in a way that ensures the old and new state are supported. That usually means making smaller changes over times, rather than one larger breaking change all at once.
In terms of GHC, base, core libraries, and the package ecosystem, I don’t yet have enough experience with the details to offer specific changes, and I would imagine other contributors have much better ideas ATM than I do, so let’s find ways of collecting those together.
That said, I would guess that we should probably run some thought experiments, for example, using both past and potential future changes as our example. There have been plenty of examples to choose from, and there are many changes planned/WIP that we can use.