[GHC] #13959: substTyVar's definition is highly dubious
GHC
ghc-devs at haskell.org
Wed Jul 12 06:09:11 UTC 2017
#13959: substTyVar's definition is highly dubious
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | 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):
Well looking at the definition of `mkVarSet`, it's no surprise that things
are going awry:
{{{#!hs
mkVarSet :: [Var] -> VarSet
mkVarSet = mkUniqSet
mkUniqSet :: Uniquable a => [a] -> UniqSet a
mkUniqSet = foldl' addOneToUniqSet emptyUniqSet
}}}
It's just grabbing the `Unique` of each type variable, and nothing more.
Experimentally, when I tried a debugging build of GHC with the modified
version of `substTyVar`, it fell over trying to compile
`Data.Type.Equality`. I don't have the full assertion failure at the
moment, but I recall that there were indeed more `tenvFVs` than what were
contained in the `in_scope` set.
[http://git.haskell.org/ghc.git/blob/1ee49cb11c7ad1af20c117a5395df96ded9a729f:/compiler/typecheck/TcGenDeriv.hs#l1686
Here's] a sample call to `mkVarSet` that's propagated through to
`substTyVars`. This is used in the logic for `GeneralizedNewtypeDeriving`,
where we need to take all the type variables mentioned in the instance
head in preparation for the substitution that substitutes the class tyvars
with the types used when deriving the instance.
...Although now that I think about it, this probably isn't a very good
example of the thing we're worried about in this ticket, since that
substitution is formed by simply zipping the class tyvars with their
instantiated types in the instance, so there's no need to ever substitute
in the kind of a tyvar... I think.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13959#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list