[GHC] #11648: assertPprPanic, called at compiler/types/TyCoRep.hs:1932
GHC
ghc-devs at haskell.org
Mon Feb 29 09:50:03 UTC 2016
#11648: assertPprPanic, called at compiler/types/TyCoRep.hs:1932
-------------------------------------+-------------------------------------
Reporter: thomie | Owner:
Type: bug | Status: new
Priority: normal | Milestone: 8.0.1
Component: Compiler | Version: 8.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by simonpj):
Here's a smaller test case for the polykinds error
{{{
class Monoidy (to :: k0 -> k1 -> *) (m :: k1) where
type MComp to m :: k1 -> k1 -> k0
mjoin :: MComp to m m m `to` m
}}}
The problem is this:
* `TcTyClsDecls.getFamDeclInitialKind` thinks that `MComp` has a CUSK.
* When it quantifies over it, it gives it the kind:
{{{
MComp :: forall k1_aLj[sk] (k0_aLi[sk] :: TYPE t_aSB[tau:1]).
(k0_aLi[sk] -> k1_aLj[sk] -> *)
-> k1_aLj[sk] -> k1_aLj[sk] -> k1_aLj[sk] -> k0_aLi[sk]
}}}
This is wrong: the `t_aSB` should be instantiated to `Lifted`. It's
terrible for a meta-tyvar to end up in the kind of a `TyCon`.
* So I'm worried about where this defaulting happens in
`TcHsType.kcHsTyVarBndrs` with `cusk` = True. Indeed, by adding tracing
to this program I've confirmed that `Monoidy` also gets a kind (at least
during kind-checking) looking like
{{{
forall (k1{tv aLi} [sk] :: *)
((k0{tv aLh} [sk] :: TYPE{(w) tc 32Q}
(t_aSs{tv} [tau:1] :: RuntimeRep{(w) tc
334}))
:: TYPE{(w) tc 32Q} (t_aSs{tv} [tau:1] :: RuntimeRep{(w) tc
334})).
((k0{tv aLh} [sk] :: TYPE{(w) tc 32Q}
(t_aSs{tv} [tau:1] :: RuntimeRep{(w) tc
334}))
-> (k1{tv aLi} [sk] :: *) -> *{(w) tc 330})
-> (k1{tv aLi} [sk] :: *)
-> Constraint{(w) tc 32Y}
}}}
Notice that `t_aSB`.
But even if we fix that I'm worried about doing this CUSK stuff for
associated types. I think it's probably wrong. We are crawling over the
class decl to find constraints on the kind variables so we can infer the
class decl's kind. We start that process with `getInitialKinds`; and we
can't at that moment quantify over the kind variables we are about to
gather constraints for!
At very least we must elaborate `Note [Complete user-supplied kind
signatures]` to cover associated types. An associate type should have a
CUSK iff (a) its parent class does, and (b) any private tyvars have kind
sigs.
I'm a bit puzzled about why we call `kcTyClDecl` and `generaliseTCD` ''at
all'' for decls with a CUSK.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11648#comment:8>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list