[GHC] #7704: Phantom types break new polykind Typeable with either StandaloneDeriving or AutoDeriveTypeable

José Pedro Magalhães jpm at cs.uu.nl
Fri Mar 1 12:07:05 CET 2013

On Mon, Feb 25, 2013 at 4:11 PM, Simon Peyton-Jones
<simonpj at microsoft.com>wrote:

>  I suppose we want an instance
> forall k. instance Typeable (k -> *) (Proxy k)
> ****
> Yes, that looks right.****
> ** **
> So the universally quantified kind variables of the tycon should end up
> universally
> quantified in the instance as well. How does this translate to the ds_tvs,
> ds_tys, and
> ds_tc_args arguments of a DerivSpec****
> ** **
> My instinct is that the ds_tvs include both type and kind variables, kind
> variables first.  The kinds of the type variables can mention the kind
> variables.

We don't have any type variables, we want to drop those, as we'll get those
via the `(Typeable f, Typeable a) => Typeable (f a)` instance.

In my branch, I currently get standalone deriving to give me the following
for this
example (tc-trace):

Standalone deriving;
  tvs: [k]
  theta: []
  cls: Typeable
  tys: [k -> *, Proxy k]
Standalone deriving:
  class: Typeable
  class types: [k -> *]
  type: Proxy k

This looks good to me. However, the generated instance is not what
I think it should be (ddump-types):

instance Typeable (forall (k :: BOX). k -> *) (Proxy k)

The forall should be outside, as now the `k` in `Proxy k` is out of scope.
I just don't know how to craft such a DerivSpec... what I have now is:

DS { ds_loc = loc, ds_orig = orig, ds_name = dfun_name, ds_tvs = tvs
    , ds_cls = cls, ds_tys = tyConKind tycon : [mkTyConApp tycon tc_args]
    , ds_tc = tycon, ds_tc_args = tc_args
    , ds_theta = mtheta `orElse` [], ds_newtype = False })  }

(I filter the type variables from the tc_args before this stage, leaving
only kind variables.)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20130301/5545c8b5/attachment.htm>

More information about the ghc-devs mailing list