Proposal: NF newtype

Edward Z. Yang ezyang at mit.edu
Tue Apr 21 19:46:05 UTC 2015


Hello all,

Taking the appropriate suggestion, I have created a small
package to provide this functionality:

    https://hackage.haskell.org/package/nf

If it migrates into deepseq, we can update this package to reexport
the appropriate modules from deepseq when it is available.

Please let me know if there's anything (e.g. version bounds) which
I can do to make this more "enterprise" ready.

Cheers,
Edward

Excerpts from Edward Z. Yang's message of 2015-02-10 08:46:37 +0000:
> I propose the following (abstract) data type, functions, and instance be
> added to deepseq (naming amenable to bikeshedding):
> 
>     newtype NF a = NF a -- abstract
>     makeNF :: NFData a => a -> NF a
>     getNF :: NF a -> a
>     instance NFData (NF a) where
>         rnf x = x `seq` ()
> 
> NF is an abstract data type representing data which has been evaluated
> to normal form; the guarantee specifically is, if NF is in whnf, then
> it is in nf.  Crucially, when we have 'NF a', we ONLY need to seq it
> in order to assure that it is fully evaluated.
> 
> This guarantee is sufficient for a variety of cases where
> normal data is necessary, e.g. when transmitting data over Channels.
> For example, from the monad-par library 'put_' could be used in place
> of 'put' with this type signature.
> 
>     put_ :: IVar (NF a) -> (NF a) -> Par () 
> 
> Cheers,
> Edward


More information about the Libraries mailing list