\begin{code}
module TcEnv(
TcId, TcIdSet,
- TyThing(..), TyThingDetails(..),
+ TyThing(..), TyThingDetails(..), TcTyThing(..),
-- Getting stuff from the environment
TcEnv, initTcEnv,
- tcEnvTyCons, tcEnvClasses, tcEnvIds, tcEnvTcIds,
+ tcEnvTyCons, tcEnvClasses, tcEnvIds, tcEnvTcIds, tcEnvTyVars,
-- Instance environment
tcGetInstEnv, tcSetInstEnv,
-- Global environment
tcExtendGlobalEnv, tcExtendGlobalValEnv,
- tcLookupTy, tcLookupTyCon, tcLookupClass, tcLookupGlobalId, tcLookupDataCon,
+ tcLookupTyCon, tcLookupClass, tcLookupGlobalId, tcLookupDataCon,
+ tcLookupGlobal_maybe,
-- Local environment
tcExtendKindEnv,
import TyCon ( TyCon, tyConKind, tyConArity, isSynTyCon )
import Class ( Class, ClassOpItem, ClassContext, classTyCon )
import Subst ( substTy )
-import Name ( Name, OccName, Provenance(..), ExportFlag(..), NamedThing(..),
+import Name ( Name, OccName, NamedThing(..),
nameOccName, nameModule, getSrcLoc, mkGlobalName,
- maybeWiredInTyConName, maybeWiredInIdName, isLocallyDefined,
+ isLocallyDefined,
NameEnv, emptyNameEnv, lookupNameEnv, nameEnvElts,
extendNameEnv, extendNameEnvList
)
import OccName ( mkDFunOcc, mkDefaultMethodOcc, occNameString )
import Module ( Module )
import Unify ( unifyTyListsX, matchTys )
-import HscTypes ( ModDetails(..), InstEnv, lookupTypeEnv )
+import HscTypes ( ModDetails(..), InstEnv, lookupTypeEnv, TyThing(..),
+ GlobalSymbolTable, Provenance(..) )
import Unique ( pprUnique10, Unique, Uniquable(..) )
import UniqFM
import Unique ( Uniquable(..) )
import FastString ( FastString )
import Maybes
import Outputable
+import IOExts ( newIORef )
\end{code}
%************************************************************************
initTcEnv :: GlobalSymbolTable -> InstEnv -> IO TcEnv
initTcEnv gst inst_env
- = do { gtv_var <- newIORef emptyVarSet
+ = do { gtv_var <- newIORef emptyVarSet ;
return (TcEnv { tcGST = gst,
tcGEnv = emptyNameEnv,
tcInsts = inst_env,
= case lookupNameEnv (tcLEnv env) name of
Just thing -> Just thing
Nothing -> case lookup_global env name of
- Just thing -> AGlobal thing
+ Just thing -> Just (AGlobal thing)
Nothing -> Nothing
explicitLookupId :: TcEnv -> Name -> Maybe Id
tcGetUnique `thenNF_Tc` \ uniq ->
returnNF_Tc (mkGlobalName uniq mod
(mkDFunOcc dfun_string inst_uniq)
- (LocalDef loc Exported))
+ loc)
where
-- Any string that is somewhat unique will do
dfun_string = occNameString (getOccName clas) ++ occNameString (getDFunTyKey ty)
= tcGetUnique `thenNF_Tc` \ uniq ->
returnNF_Tc (mkGlobalName uniq (nameModule op_name)
(mkDefaultMethodOcc (getOccName op_name))
- (LocalDef loc Exported))
+ loc)
\end{code}
\begin{code}
tcLookupGlobal :: Name -> NF_TcM TyThing
+tcLookupGlobal name
= tcLookupGlobal_maybe name `thenNF_Tc` \ maybe_thing ->
case maybe_thing of
Just thing -> returnNF_Tc thing
tcLookupGlobalId name
= tcLookupGlobal_maybe name `thenNF_Tc` \ maybe_id ->
case maybe_id of
- Just (AnId clas) -> returnNF_Tc id
+ Just (AnId clas) -> returnNF_Tc clas
other -> notFound "tcLookupGlobalId:" name
tcLookupDataCon :: Name -> TcM DataCon