Proposal: NF newtype

Michael Snoyman michael at snoyman.com
Wed Apr 22 07:54:32 UTC 2015


Small request: could you bump the upper bound to allow base 4? ;)

On Wed, Apr 22, 2015 at 10:50 AM Edward Z. Yang <ezyang at mit.edu> wrote:

> 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
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20150422/35a145cd/attachment.html>


More information about the Libraries mailing list