X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=compiler%2Futils%2FOutputable.lhs;h=2bf1b9cc4a4a35d8f1bd989b5391b245c8d0fa37;hb=421819753b3eb4940a26e578ef0e4c5cd31761fa;hp=2462ea2052382d01c730f047582a18780b85856e;hpb=c02da7d1176d2165e7f9ec6f42752d456dd9fee2;p=ghc-hetmet.git diff --git a/compiler/utils/Outputable.lhs b/compiler/utils/Outputable.lhs index 2462ea2..2bf1b9c 100644 --- a/compiler/utils/Outputable.lhs +++ b/compiler/utils/Outputable.lhs @@ -19,7 +19,7 @@ module Outputable ( BindingSite(..), - PprStyle, CodeStyle(..), PrintUnqualified, alwaysQualify, + PprStyle, CodeStyle(..), PrintUnqualified, alwaysQualify, QualifyName(..), getPprStyle, withPprStyle, withPprStyleDoc, pprDeeper, pprDeeperList, pprSetDepth, codeStyle, userStyle, debugStyle, dumpStyle, asmStyle, @@ -121,26 +121,36 @@ data Depth = AllTheWay -- as @Exception.catch@, this fuction will return @Just "Exception"@. -- Note that the return value is a ModuleName, not a Module, because -- in source code, names are qualified by ModuleNames. -type QualifyName = Module -> OccName -> Maybe ModuleName +type QueryQualifyName = Module -> OccName -> QualifyName + +data QualifyName -- given P:M.T + = NameUnqual -- refer to it as "T" + | NameQual ModuleName -- refer to it as "X.T" for the supplied X + | NameNotInScope1 + -- it is not in scope at all, but M.T is not bound in the current + -- scope, so we can refer to it as "M.T" + | NameNotInScope2 + -- it is not in scope at all, and M.T is already bound in the + -- current scope, so we must refer to it as "P:M.T" + -- | For a given module, we need to know whether to print it with --- a package name to disambiguate it, and if so which package name should --- we use. -type QualifyModule = Module -> Maybe PackageId +-- a package name to disambiguate it. +type QueryQualifyModule = Module -> Bool -type PrintUnqualified = (QualifyName, QualifyModule) +type PrintUnqualified = (QueryQualifyName, QueryQualifyModule) -alwaysQualifyNames :: QualifyName -alwaysQualifyNames m n = Just (moduleName m) +alwaysQualifyNames :: QueryQualifyName +alwaysQualifyNames m n = NameQual (moduleName m) -neverQualifyNames :: QualifyName -neverQualifyNames m n = Nothing +neverQualifyNames :: QueryQualifyName +neverQualifyNames m n = NameUnqual -alwaysQualifyModules :: QualifyModule -alwaysQualifyModules m = Just (modulePackageId m) +alwaysQualifyModules :: QueryQualifyModule +alwaysQualifyModules m = True -neverQualifyModules :: QualifyModule -neverQualifyModules m = Nothing +neverQualifyModules :: QueryQualifyModule +neverQualifyModules m = False alwaysQualify = (alwaysQualifyNames, alwaysQualifyModules) neverQualify = (neverQualifyNames, neverQualifyModules) @@ -217,13 +227,13 @@ getPprStyle df sty = df sty sty \end{code} \begin{code} -qualName :: PprStyle -> QualifyName +qualName :: PprStyle -> QueryQualifyName qualName (PprUser (qual_name,_) _) m n = qual_name m n -qualName other m n = Just (moduleName m) +qualName other m n = NameQual (moduleName m) -qualModule :: PprStyle -> QualifyModule +qualModule :: PprStyle -> QueryQualifyModule qualModule (PprUser (_,qual_mod) _) m = qual_mod m -qualModule other m = Just (modulePackageId m) +qualModule other m = True codeStyle :: PprStyle -> Bool codeStyle (PprCode _) = True