Proposal: Add Data instance for Const

Ryan Scott ryan.gl.scott at gmail.com
Wed Nov 2 19:27:39 UTC 2016


> 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 <vlad.z.4096 at gmail.com> wrote:

> 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 <ekmett at gmail.com> wrote:
> > Definitely an oversight.
> >
> > On Wed, Nov 2, 2016 at 11:40 AM, Ryan Scott <ryan.gl.scott at gmail.com>
> 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 at haskell.org
> >> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> >
> >
> >
> > _______________________________________________
> > Libraries mailing list
> > Libraries at haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20161102/c2f224d8/attachment-0001.html>


More information about the Libraries mailing list