Proposal: Make `NFData` a fundamental/primitive type-class (by making `deepseq` a GHC-boot package)

Simon Marlow marlowsd at
Thu Aug 25 12:04:43 CEST 2011

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)


More information about the Libraries mailing list