-
-
--- Yuk!
-ifaceFlavour name = case getNameProvenance name of
- NonLocalDef _ hif _ -> hif
- other -> HiFile -- Shouldn't happen
-\end{code}
-
-
-%*********************************************************
-%* *
-\subsection{Looking up names}
-%* *
-%*********************************************************
-
-Looking up a name in the RnEnv.
-
-\begin{code}
-checkUnboundRn :: RdrName -> Maybe Name -> RnMS s Name
-checkUnboundRn rdr_name (Just name)
- = -- Found it!
- returnRn name
-
-checkUnboundRn rdr_name Nothing
- = -- Not found by lookup
- getModeRn `thenRn` \ mode ->
- case mode of
- -- Not found when processing source code; so fail
- SourceMode -> failWithRn (mkUnboundName rdr_name)
- (unknownNameErr rdr_name)
-
- -- Not found when processing an imported declaration,
- -- so we create a new name for the purpose
- InterfaceMode _ -> newImportedGlobalFromRdrName rdr_name
-
-lookupBndrRn rdr_name
- = lookupNameRn rdr_name `thenRn` \ maybe_name ->
- checkUnboundRn rdr_name maybe_name
-
--- Just like lookupRn except that we record the occurrence too
--- Perhaps surprisingly, even wired-in names are recorded.
--- Why? So that we know which wired-in names are referred to when
--- deciding which instance declarations to import.
-lookupOccRn :: RdrName -> RnMS s Name
-lookupOccRn rdr_name
- = lookupNameRn rdr_name `thenRn` \ maybe_name ->
- checkUnboundRn rdr_name maybe_name `thenRn` \ name ->
- let
- name' = mungePrintUnqual rdr_name name
- in
- addOccurrenceName name'
-
--- lookupGlobalOccRn is like lookupOccRn, except that it looks in the global
--- environment. It's used only for
--- record field names
--- class op names in class and instance decls
-lookupGlobalOccRn :: RdrName -> RnMS s Name
-lookupGlobalOccRn rdr_name
- = lookupGlobalNameRn rdr_name `thenRn` \ maybe_name ->
- checkUnboundRn rdr_name maybe_name `thenRn` \ name ->
- let
- name' = mungePrintUnqual rdr_name name
- in
- addOccurrenceName name'
-
-
--- mungePrintUnqual is used to make *imported* *occurrences* print unqualified
--- if they were mentioned unqualified in the source code.
--- This improves error messages from the type checker.
--- NB: the binding site is treated differently; see lookupBndrRn
--- After the type checker all occurrences are replaced by the one
--- at the binding site.
-mungePrintUnqual (Qual _ _ _) name = name
-mungePrintUnqual (Unqual _) name
- = case getNameProvenance name of
- NonLocalDef imp hif False -> setNameProvenance name (NonLocalDef imp hif True)
- other -> name
-
--- lookupImplicitOccRn takes an RdrName representing an *original* name, and
--- adds it to the occurrence pool so that it'll be loaded later. This is
--- used when language constructs (such as monad comprehensions, overloaded literals,
--- or deriving clauses) require some stuff to be loaded that isn't explicitly
--- mentioned in the code.
---
--- This doesn't apply in interface mode, where everything is explicit, but
--- we don't check for this case: it does no harm to record an "extra" occurrence
--- and lookupImplicitOccRn isn't used much in interface mode (it's only the
--- Nothing clause of rnDerivs that calls it at all I think).
--- [Jan 98: this comment is wrong: rnHsType uses it quite a bit.]
---
--- For List and Tuple types it's important to get the correct
--- isLocallyDefined flag, which is used in turn when deciding
--- whether there are any instance decls in this module are "special".
--- The name cache should have the correct provenance, though.
-
-lookupImplicitOccRn :: RdrName -> RnMS s Name
-lookupImplicitOccRn (Qual mod occ hif)
- = newImportedGlobalName mod occ hif `thenRn` \ name ->
- addOccurrenceName name
-
-addImplicitOccRn :: Name -> RnMS s Name
-addImplicitOccRn name = addOccurrenceName name
-
-addImplicitOccsRn :: [Name] -> RnMS s ()
-addImplicitOccsRn names = addOccurrenceNames names
-\end{code}
-
-\begin{code}
-lookupFixity :: Name -> RnMS s Fixity
-lookupFixity name
- = getFixityEnv `thenRn` \ fixity_env ->
- case lookupNameEnv fixity_env name of
- Just (FixitySig _ fixity _) -> returnRn fixity
- Nothing -> returnRn (Fixity 9 InfixL) -- Default case