[GHC] #13998: Default Signature messes up arity of type constructor
GHC
ghc-devs at haskell.org
Wed Jul 19 15:57:52 UTC 2017
#13998: Default Signature messes up arity of type constructor
-------------------------------------+-------------------------------------
Reporter: andrewthad | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.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 RyanGlScott):
I'm 99% sure the culprit is
[http://git.haskell.org/ghc.git/blob/d7b17517e26007f537feab490509c0e13e0e239a:/compiler/typecheck/TcTyDecls.hs#l771
here]:
{{{#!hs
mkDefaultMethodType :: Class -> Id -> DefMethSpec Type -> Type
-- Returns the top-level type of the default method
mkDefaultMethodType _ sel_id VanillaDM = idType sel_id
mkDefaultMethodType cls _ (GenericDM dm_ty) = mkSpecSigmaTy cls_tvs
[pred] dm_ty
where
cls_tvs = classTyVars cls
pred = mkClassPred cls (mkTyVarTys cls_tvs)
}}}
The second case (`GenericDM`) is what constructs the type of
`$dmeqForallPoly`. Notice that it's using `mkSpecSigmaTy` to prepend the
`forall k (f :: k -> *). EqForallPoly f => ...` bit to the rest of the
type. However, because it's using `mkSpecSigmaTy`, every class tyvar
binder has a visibility of `Specified`, meaning they'll all be available
for visible type application, which isn't what we want.
However, I'm not sure how to inform GHC that `k` should be invisible, but
`f` should be visible, in this code. The problem is that the `Class` data
type
[http://git.haskell.org/ghc.git/blob/d7b17517e26007f537feab490509c0e13e0e239a:/compiler/types/Class.hs#l52
doesn't store any visibility information for its type variables]...
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13998#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list