X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Ftypecheck%2FTcSplice.lhs;h=31dfd3141aceab76bf17d4fea054de3cc8bc9aa3;hb=ff845ab59d1d465d874d3908fd0cdd61b8594da2;hp=08e47eeb54fa4de8d6f66d06c0be5030fe17266e;hpb=837824d2ff329a0f68c1434ae6812bea3ac7ec5f;p=ghc-hetmet.git diff --git a/ghc/compiler/typecheck/TcSplice.lhs b/ghc/compiler/typecheck/TcSplice.lhs index 08e47ee..31dfd31 100644 --- a/ghc/compiler/typecheck/TcSplice.lhs +++ b/ghc/compiler/typecheck/TcSplice.lhs @@ -43,9 +43,9 @@ import Var ( Id, TyVar, idType ) import Module ( moduleUserString, mkModuleName ) import TcRnMonad import IfaceEnv ( lookupOrig ) -import Class ( Class, classBigSig ) +import Class ( Class, classExtraBigSig ) import TyCon ( TyCon, AlgTyConRhs(..), tyConTyVars, getSynTyConDefn, - isSynTyCon, isNewTyCon, tyConDataCons, algTcRhs ) + isSynTyCon, isNewTyCon, tyConDataCons, algTyConRhs ) import DataCon ( DataCon, dataConTyCon, dataConOrigArgTys, dataConStrictMarks, dataConName, dataConFieldLabels, dataConWrapId, dataConIsInfix, isVanillaDataCon ) @@ -569,7 +569,7 @@ reifyTyCon tc ; return (TH.TySynD (reifyName tc) (reifyTyVars tvs) rhs') } reifyTyCon tc - = case algTcRhs tc of + = case algTyConRhs tc of NewTyCon data_con _ _ -> do { con <- reifyDataCon data_con ; return (TH.NewtypeD [] (reifyName tc) (reifyTyVars (tyConTyVars tc)) @@ -608,9 +608,10 @@ reifyClass :: Class -> TcM TH.Dec reifyClass cls = do { cxt <- reifyCxt theta ; ops <- mapM reify_op op_stuff - ; return (TH.ClassD cxt (reifyName cls) (reifyTyVars tvs) ops) } + ; return (TH.ClassD cxt (reifyName cls) (reifyTyVars tvs) fds' ops) } where - (tvs, theta, _, op_stuff) = classBigSig cls + (tvs, fds, theta, _, op_stuff) = classExtraBigSig cls + fds' = map reifyFunDep fds reify_op (op, _) = do { ty <- reifyType (idType op) ; return (TH.SigD (reifyName op) ty) } @@ -629,6 +630,9 @@ reifyType ty@(ForAllTy _ _) = do { cxt' <- reifyCxt cxt; reifyTypes = mapM reifyType reifyCxt = mapM reifyPred +reifyFunDep :: ([TyVar], [TyVar]) -> TH.FunDep +reifyFunDep (xs, ys) = TH.FunDep (map reifyName xs) (map reifyName ys) + reifyTyVars :: [TyVar] -> [TH.Name] reifyTyVars = map reifyName