-- Copyright 2019 Google LLC -- -- Use of this source code is governed by a BSD-style -- license that can be found in the LICENSE file or at -- https://developers.google.com/open-source/licenses/bsd -- | This module defines custom types for defining names of various -- syntax terms. -- -- These types are all instances of 'Data.String.IsString'. For ease of use, -- we recommend enabling the @OverloadedStrings@ extension. {-# LANGUAGE CPP #-} module GHC.SourceGen.Name ( -- * RdrNameStr RdrNameStr(..) , RawNameSpace(..) , rdrNameStrToString , qual , unqual -- * OccNameStr , OccNameStr , occNameStrToString , occNameStrNamespace , occNameToStr , nameToStr -- ModuleNameStr , ModuleNameStr(..) , moduleNameStrToString ) where #if MIN_VERSION_ghc(9,0,0) import GHC.Data.FastString (unpackFS) import GHC.Unit.Module (moduleNameString) import GHC.Types.Name.Occurrence (OccName, occNameFS, occNameSpace, isVarNameSpace) import GHC.Types.Name (Name, nameOccName) #else import FastString (unpackFS) import Module (moduleNameString) import OccName (OccName, occNameFS, occNameSpace, isVarNameSpace) import Name (Name, nameOccName) #endif import GHC.SourceGen.Name.Internal unqual :: OccNameStr -> RdrNameStr unqual = UnqualStr qual :: ModuleNameStr -> OccNameStr -> RdrNameStr qual = QualStr moduleNameStrToString :: ModuleNameStr -> String moduleNameStrToString = moduleNameString . unModuleNameStr occNameStrToString :: OccNameStr -> String occNameStrToString (OccNameStr _ s) = unpackFS s occNameStrNamespace :: OccNameStr -> RawNameSpace occNameStrNamespace (OccNameStr n _) = n rdrNameStrToString :: RdrNameStr -> String rdrNameStrToString (UnqualStr o) = occNameStrToString o rdrNameStrToString (QualStr m o) = moduleNameStrToString m ++ '.' : occNameStrToString o -- | Converts a GHC 'OccName' to an 'OccNameStr'. Ignores whether the input -- came from the namespace of types or of values. occNameToStr :: OccName -> OccNameStr occNameToStr o = OccNameStr n (occNameFS o) where n = if isVarNameSpace $ occNameSpace o then Value else Constructor -- | Converts from a GHC 'Name' to an 'OccNameStr'. Ignores whether -- the input came from the namespace of types or of values, as well -- as any other information about where the name came from. nameToStr :: Name -> OccNameStr nameToStr = occNameToStr . nameOccName