Use a correct substitution in tcInstType
authorBartosz Nitka <niteria@gmail.com>
Tue, 29 Mar 2016 10:41:59 +0000 (12:41 +0200)
committerBen Gamari <ben@smart-cactus.org>
Tue, 29 Mar 2016 10:42:05 +0000 (12:42 +0200)
`ty` doesn't have to be a closed type, so we need to add its
free vars to the in-scope set. They don't seem to be
available anywhere nearby, so we have to compute them.

Test Plan: ./validate

Reviewers: goldfire, austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: thomie, simonmar

Differential Revision: https://phabricator.haskell.org/D2042

GHC Trac Issues: #11371

compiler/typecheck/TcMType.hs

index 628c9e3..cb9ed72 100644 (file)
@@ -439,7 +439,7 @@ tcInstType inst_tyvars ty
                             return ([], theta, tau)
 
         (tyvars, rho) -> do { (subst, tyvars') <- inst_tyvars tyvars
-                            ; let (theta, tau) = tcSplitPhiTy (substTyUnchecked subst rho)
+                            ; let (theta, tau) = tcSplitPhiTy (substTyAddInScope subst rho)
                             ; return (tyvars', theta, tau) }
 
 tcSkolDFunType :: Type -> TcM ([TcTyVar], TcThetaType, TcType)