module GHC.NameViolation where import qualified Name as N import FastString import Unique import SrcLoc import Module import TyCoRep import Unsafe.Coerce violateName :: N.Name -> Name violateName = unsafeCoerce showName :: Name -> String showName (Name (External m) occ _ _) = showModule m ++ "." ++ unpackFS (occNameFS occ) showName (Name (WiredIn m _ _) occ _ _) = showModule m ++ "." ++ unpackFS (occNameFS occ) showName (Name Internal occ _ _) = unpackFS (occNameFS occ) showName (Name System occ _ _) = unpackFS (occNameFS occ) showModule :: Module -> String showModule = moduleStableString data OccName = OccName { occNameSpace :: !N.NameSpace , occNameFS :: !FastString } data Name = Name { n_sort :: NameSort -- What sort of name it is , n_occ :: !OccName -- Its occurrence name , n_uniq :: {-# UNPACK #-} !Unique , n_loc :: !SrcSpan -- Definition site } data NameSort = External Module | WiredIn Module TyThing N.BuiltInSyntax -- A variant of External, for wired-in things | Internal -- A user-defined Id or TyVar -- defined in the module being compiled | System -- A system-defined Id or TyVar. Typically the -- OccName is very uninformative (like 's')