
On 25/08/2011 08:12, Simon Peyton-Jones wrote:
| Make `NFData` a fundamental/primitive type-class | (by making `deepseq` a GHC-boot package)
The goals are good, but I don't follow the proposed design. In particular, why does the deepseq package need to be in base?
The proposal is to make deepseq a boot package, not to move anything into base.
In principle, you can do this:
* Implement deepseq
* Add instances for GHC types and container types; these instances wouldn't be orphans because they'd be in the module defining the NFData class
That's what we have right now, the problem is that deepseq can't define a good instance for NFData Map, because it can't see enough of the internals of Map.
The main objection seems to be this:
* deepseq would thereby depend on 'containers' (say), whereas a random customer of deepseq might find that odd. And it might increase the size of his binaries.
The solution to that is to make containers depend on deepseq. That would induce the inverse dependency: every user of containers would get deepseq willy-nilly. Perhaps that is less bad.
And it would make 'deepseq' into a GHC boot package, which is probably fine.
Exactly, that's the proposal! (+1 from me, BTW) Cheers, Simon