Proposal: NF newtype

Michael Snoyman michael at snoyman.com
Tue Feb 10 11:44:10 UTC 2015


On Tue Feb 10 2015 at 1:41:48 PM Herbert Valerio Riedel <hvr at gnu.org> wrote:

> On 2015-02-10 at 09:46:37 +0100, Edward Z. Yang wrote:
> > 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` ()
>
> I generally like it, so count me as +1
>
> bikeshed-wondering though, why did you make it abstract w/ separate
> construct/deconstructors?
>
>
>
If the real constructor was available, then someone would be free to write
something like:

    let foo = NF $ 1 : undefined

which would break the guarantees that this type is trying to provide.


> as a related concept (and hoping not to derail the discussion too much),
> I had attempted some time ago to implement TH predicates  that could
> infer if WHNF=NF holds:
>
>  http://hackage.haskell.org/package/deepseq-th-0.1.0.4/
> docs/Control-DeepSeq-TH.html#v:typeWhnfIsNf
>
> and back then I was wondering, if GHC couldn't help us out here (maybe
> by providing an implicit NF=WHNF class-instance -- and btw, I recently
> found out, Haskell 1.4 had an implicit 'Eval'-class declaring
> `seq`-ability)
>
> I'm not sure though if WHNF=NF can always be decided...
>
>
> Cheers,
>   hvr
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20150210/b38b0d8d/attachment-0001.html>


More information about the Libraries mailing list