Me too. So all of what follows may be total nonsense…
Over in this thread angerman made a simple suggestion: put all breaking changes under flags. This could be combined with santiweight’s suggestion from this “tick-tock release” thread as follows:
-
in ghc-
v
.k
.m
(v
constant) - breaking changes can only be enabled by using their respective flags -
in ghc-
v+1
.k
.m
(new major release) - breaking changes (those which have proven to be reliable and widely-acceptable) from versionv
are then enabled by default, but can still be disabled. -
in ghc-
v+2
.k
.m
(next major release) - assuming no further problems, breaking changes from versionv
are made permanent (they cannot be disabled).
Haskell developers can then use breaking features by enabling the appropriate flags (before the new major release arrives), and Haskell maintainers only have to be concerned with widespread breakage upon the arrival of each new major release.