From: simonpj Date: Mon, 5 Jan 2004 09:35:39 +0000 (+0000) Subject: [project @ 2004-01-05 09:35:39 by simonpj] X-Git-Tag: Approx_11550_changesets_converted~154 X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=623e5fbbbec02e1cc5d80f0685919ecb6b845d35 [project @ 2004-01-05 09:35:39 by simonpj] Buglet in desugaring instance declarations --- diff --git a/ghc/compiler/deSugar/DsMeta.hs b/ghc/compiler/deSugar/DsMeta.hs index 31a8a0d..4bcb32e 100644 --- a/ghc/compiler/deSugar/DsMeta.hs +++ b/ghc/compiler/deSugar/DsMeta.hs @@ -213,20 +213,24 @@ repTyClD (L loc d) = do { dsWarn (loc, hang msg 4 (ppr d)) ; where msg = ptext SLIT("Cannot desugar this Template Haskell declaration:") -repInstD' (L loc (InstDecl ty binds _)) - -- Ignore user pragmas for now - = do { cxt1 <- repContext cxt - ; inst_ty1 <- repPred (HsClassP cls tys) - ; ss <- mkGenSyms (collectHsBindBinders binds) - ; binds1 <- addBinds ss (rep_binds binds) - ; decls1 <- coreList decQTyConName binds1 - ; decls2 <- wrapNongenSyms ss decls1 - -- wrapNonGenSyms: do not clone the class op names! - -- They must be called 'op' etc, not 'op34' - ; i <- repInst cxt1 inst_ty1 decls2 +repInstD' (L loc (InstDecl ty binds _)) -- Ignore user pragmas for now + = do { i <- addTyVarBinds tvs $ \tv_bndrs -> + -- We must bring the type variables into scope, so their occurrences + -- don't fail, even though the binders don't appear in the resulting + -- data structure + do { cxt1 <- repContext cxt + ; inst_ty1 <- repPred (HsClassP cls tys) + ; ss <- mkGenSyms (collectHsBindBinders binds) + ; binds1 <- addBinds ss (rep_binds binds) + ; decls1 <- coreList decQTyConName binds1 + ; decls2 <- wrapNongenSyms ss decls1 + -- wrapNonGenSyms: do not clone the class op names! + -- They must be called 'op' etc, not 'op34' + ; repInst cxt1 inst_ty1 decls2 } + ; return (loc, i)} where - (_, cxt, cls, tys) = splitHsInstDeclTy (unLoc ty) + (tvs, cxt, cls, tys) = splitHsInstDeclTy (unLoc ty) ------------------------------------------------------- -- Constructors