[Haskell-cafe] ANN: generic-deepseq 1.0.0.0
Maxime Henrion
mhenrion at gmail.com
Fri Feb 24 09:50:06 CET 2012
On Fri, 2012-02-24 at 09:32 +0100, Jos Pedro Magalhes wrote:
>
>
> 2012/2/24 Maxime Henrion <mhenrion at gmail.com>
> On Fri, 2012-02-24 at 07:49 +0100, Jos Pedro Magalhes wrote:
> > Hi,
> >
> > 2012/2/23 Maxime Henrion <mhenrion at gmail.com>
> >
> > > * Why do you have the instance:
> > >
> > > instance GDeepSeq V1 where grnf _ = ()
> > >
> > > The only way to construct values of a void type is
> using ⊥.
> > And I
> > > would expect that rnf ⊥ = ⊥, not (). I think the
> best thing
> > is to just
> > > remove the V1 instance.
> >
> >
> > This would have the consequence that any type tagged
> with a
> > phantom type
> > (for whatever reason) couldn't be used with deepseq,
> it would
> > return
> > bottom. What if I want to deepseq a 2-3 finger tree
> tagged
> > with a
> > type-level natural that ensures the proper shape of
> the tree
> > statically?
> > It seemed to me that I should be able to do that;
> this is why
> > I added
> > this V1 instance.
> >
> > I'm not sure I understand your comment... V1 should only be
> used for
> > datatypes without constructors, such as `data Empty`.
>
>
> Yes, such as the usual type-level naturals (not using
> DataKinds):
>
> data Z
> data S n
>
> Those can be used to tag a type which also contains actual
> values that
> you would want to deepseq? For example, a length-type vector?
>
> But in those cases they are used as tags, not as values, and hence do
> not show up in the generic representation. So if all you want is to be
> able to deepseq a value of a type like
>
> data Proxy t = Proxy
>
> even if your value is of type `Proxy Ze`, you shouldn't need a `V1`
> instance.
Oh, ok; in that case, I probably don't need that V1 instance indeed. I
should probably write QuickCheck tests using the ChasingBottoms package
in order to ensure correct behaviour of this code.
Thanks,
Maxime
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: This is a digitally signed message part
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120224/c9d831c6/attachment.pgp>
More information about the Haskell-Cafe
mailing list