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