[Haskell-cafe] ANN: generic-deepseq

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.


-------------- 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