Tool Support for syntactic change
It is likely that Haskell Prime will make some breaking changes to Haskell'98 code. Thus, it may be worthwhile to consider implementing some tool support to ease the transition. This would take the form of a syntax translator. Many of the components for such a tool already exist (parsers and prettyprinters for the haskell language), so it should be possible with only a little effort.
- Haskell'98 to Haskell Prime.
I imagine the maintainers of old code would be happiest if there were a mechanical and guaranteed semantically correct
method for updating their modules. Issues to consider:
- simple removal candidates e.g. (n+k) patterns, irrefutable patterns, etc.
- transform imports of the Haskell'98 libraries to imports of Haskell Prime libraries
- any major changes, e.g. records
- Haskell Prime to Haskell'98. There is also a case to be made that, if there are to be syntactic additions to the language, it is valuable to define them in terms of the existing Haskell'98 core. A syntactic translator could then be used as a simple pre-processor to enable users to gain experience with the proposals in real code, but using existing compilers. This might enable e.g. QuickChecking? of semantic properties to compare the intended meaning of new constructs with the proposed translation to core (for errors). It would also be a low-cost way to permit decisions on new syntax to be deferred while experience is gained. If a proposal is eventually rejected, the translator means that any code using the new extension can easily be reverted.
- It would also be good of implementations to seamlessly support the integration of haskell 98 and haskell' code, so new code may be written in haskell' but there would be no pressing need to change working code.