Commit d3d2b45d authored by simonpj@microsoft.com's avatar simonpj@microsoft.com

Complain sensibly if you try to use scoped type variables in Template Haskell

This fixes Trac #2024; worth merging onto 6.8 branch.
parent 47adb8b6
......@@ -424,7 +424,7 @@ repTy (HsForAllTy _ tvs ctxt ty) =
repTy (HsTyVar n)
| isTvOcc (nameOccName n) = do
tv1 <- lookupBinder n
tv1 <- lookupTvOcc n
repTvar tv1
| otherwise = do
tc1 <- lookupOcc n
......@@ -917,6 +917,18 @@ lookupOcc n
Just (Splice _) -> pprPanic "repE:lookupOcc" (ppr n)
}
lookupTvOcc :: Name -> DsM (Core TH.Name)
-- Type variables can't be staged and are not lexically scoped in TH
lookupTvOcc n
= do { mb_val <- dsLookupMetaEnv n ;
case mb_val of
Just (Bound x) -> return (coreVar x)
other -> failWithDs msg
}
where
msg = vcat [ ptext SLIT("Illegal lexically-scoped type variable") <+> quotes (ppr n)
, ptext SLIT("Lexically scoped type variables are not supported by Template Haskell") ]
globalVar :: Name -> DsM (Core TH.Name)
-- Not bound by the meta-env
-- Could be top-level; or could be local
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment