X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Ftypecheck%2FTcTyDecls.lhs;fp=ghc%2Fcompiler%2Ftypecheck%2FTcTyDecls.lhs;h=824e95c54f8c7be708917e5e776d23aea108d6de;hb=550421384b8364cdaf3135f7859c9f7d7ee1fff1;hp=6e880cbcc936e08c1bb3b448c426891135d11f7c;hpb=60ea58ab5cbf8428997d5aa8ec9163a50fe5aed3;p=ghc-hetmet.git diff --git a/ghc/compiler/typecheck/TcTyDecls.lhs b/ghc/compiler/typecheck/TcTyDecls.lhs index 6e880cb..824e95c 100644 --- a/ghc/compiler/typecheck/TcTyDecls.lhs +++ b/ghc/compiler/typecheck/TcTyDecls.lhs @@ -20,7 +20,7 @@ module TcTyDecls( #include "HsVersions.h" import TypeRep ( Type(..), TyNote(..), PredType(..) ) -- friend -import HsSyn ( TyClDecl(..), HsPred(..) ) +import HsSyn ( TyClDecl(..), HsPred(..), LTyClDecl ) import RnHsSyn ( extractHsTyNames ) import Type ( predTypeRep ) import BuildTyCl ( newTyConRhs ) @@ -37,6 +37,7 @@ import NameEnv import NameSet import Digraph ( SCC(..), stronglyConnComp, stronglyConnCompR ) import BasicTypes ( RecFlag(..) ) +import SrcLoc ( Located(..) ) import Outputable \end{code} @@ -106,18 +107,25 @@ synTyConsOfType ty ---------------------------------------- END NOTE ] \begin{code} -calcCycleErrs :: [TyClDecl Name] -> ([[Name]], -- Recursive type synonym groups +calcCycleErrs :: [LTyClDecl Name] -> ([[Name]], -- Recursive type synonym groups [[Name]]) -- Ditto classes calcCycleErrs decls = (findCyclics syn_edges, findCyclics cls_edges) where --------------- Type synonyms ---------------------- - syn_edges = [ (name, mk_syn_edges rhs) | TySynonym { tcdName = name, tcdSynRhs = rhs } <- decls ] - mk_syn_edges rhs = [ tc | tc <- nameSetToList (extractHsTyNames rhs), not (isTyVarName tc) ] + syn_edges = [ (name, mk_syn_edges rhs) | + L _ (TySynonym { tcdLName = L _ name, + tcdSynRhs = rhs }) <- decls ] + + mk_syn_edges rhs = [ tc | tc <- nameSetToList (extractHsTyNames rhs), + not (isTyVarName tc) ] --------------- Classes ---------------------- - cls_edges = [ (name, mk_cls_edges ctxt) | ClassDecl { tcdName = name, tcdCtxt = ctxt } <- decls ] - mk_cls_edges ctxt = [ cls | HsClassP cls _ <- ctxt ] + cls_edges = [ (name, mk_cls_edges ctxt) | + L _ (ClassDecl { tcdLName = L _ name, + tcdCtxt = L _ ctxt }) <- decls ] + + mk_cls_edges ctxt = [ cls | L _ (HsClassP cls _) <- ctxt ] \end{code}