On Fri, 2012-02-24 at 07:49 +0100, Jos Pedro Magalhes wrote: > Hi, > > 2012/2/23 Maxime Henrion <mhenr...@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 > >
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe