On Sat, 2012-02-25 at 11:38 +0100, José Pedro Magalhães wrote: > 2012/2/25 Andres Löh <andres.l...@googlemail.com> > > Would you have an example of a type for which it would be > useful to have > > a DeepSeq instance, and that would require a V1 instance? I > cannot think > > of one now; I originaly thought it would be necessary to > permit deriving > > DeepSeq instances for types tagged with "void" types, but as > José > > explained, in that case, the V1 instance isn't needed > because those void > > types don't show up in the representation. > > > While void datatypes are rare, it just doesn't make sense to > exclude > them. It's an arbitrary restriction. Here's a constructed > example: > > data X a = C1 Int | C2 a > data Z -- empty > > type Example = X Z > > We're using Z as a parameter to X in order to exclude the use > of the > C2 case. Without a V1 case, you cannot use deepSeq on values > of type > Example. > > Yes, I agree. There should be a V1 instance, and it should return > `undefined`. This gives the expected behavior of `seq` on an empty > datatype, I think. If there is no V1 instance, you'll get a > type-checking error (no instance for V1), preventing generic deepseq > on any datatype that happens to use an empty datatype in its > definition.
Thanks for all the input guys. I have just released generic-deepseq 2.0.1.0 to hackage, with fixed U1 and V1 instances per this discussion. 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