
The proposed instance is overconstrained. You only need Typeable for the second argument of Const (because it is phantom).
It's a phantom type, but the Data constraint is necessary because the way
deriving Data works. If You can read this [1] for an explanation behind
this design decision. Essentially, if GHC sees that a datatype has two type
parameters of kind *, then it generates a definition for the dataCast2
method, which allows for a higher-order version of the cast function. But
implementing dataCast2 requires that both type parameters be Data instances.
A separate question would be whether implementing dataCast2 could be done
without these Data constraints (and thus allowing the second type parameter
to only be an instance of Typeable, rather than Data). But that is outside
my area of expertise; I'd need someone more knowledgeable in the arts of
Data.Data than I.
For now, I am proposing what GHC currently considers to be a canonical Data
instance for Const. We can revisit the exact instance context details later
if need be.
Ryan S.
-----
[1] https://ghc.haskell.org/trac/ghc/ticket/4028
On Wed, Nov 2, 2016 at 3:16 PM, Index Int
The proposed instance is overconstrained. You only need Typeable for the second argument of Const (because it is phantom).
On Wed, Nov 2, 2016 at 7:05 PM, Edward Kmett
wrote: Definitely an oversight.
On Wed, Nov 2, 2016 at 11:40 AM, Ryan Scott
wrote: GHC Trac #12438 [1] exists because there's no Data instance for Const in base. I found this quite surprising, since we have Data instances for just about every other type combinator out there (Identity, Sum, Product, Compose, etc.), but not for Const. The fix for #12438 would be quite simple: I propose we add
deriving instance (Data a, Data b) => Data (Const a b)
to Data.Data in base. Any objections?
Ryan S. ----- [1] https://ghc.haskell.org/trac/ghc/ticket/12438 _______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries