[Haskell-cafe] ANN: generic-deepseq 1.0.0.0
Maxime Henrion
mhenrion at gmail.com
Fri Feb 24 09:26:22 CET 2012
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? I seemed
to remember a similar construct for 2-3 finger trees that would
statically guarantee that the shape of the tree is valid, so I took that
as an example, but I don't remember the specifics.
Cheers,
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/6a94a5ab/attachment.pgp>
More information about the Haskell-Cafe
mailing list