large-anon-0.1.0.0: src/Data/Record/Anon/Internal/Plugin/Source/Names.hs
-- | Names used in code generation
--
-- Intended for unqualified.
module Data.Record.Anon.Internal.Plugin.Source.Names (
-- * large-anon
LargeAnonNames(..)
, largeAnonNames
-- * typelet
, typelet_castEqual
) where
import Data.Record.Anon.Internal.Plugin.Source.GhcShim
import Data.Record.Anon.Internal.Plugin.Source.Options (Mode(..))
{-------------------------------------------------------------------------------
large-anon
-------------------------------------------------------------------------------}
-- | Named required for code generation
--
-- All names are expected to be qualified with the full module name
data LargeAnonNames = LargeAnonNames {
largeAnon_empty :: RdrName
, largeAnon_insert :: RdrName
, largeAnon_applyPending :: RdrName
, largeAnon_letRecordT :: RdrName
, largeAnon_letInsertAs :: RdrName
}
largeAnonNames :: Mode -> LargeAnonNames
largeAnonNames mode = LargeAnonNames {
largeAnon_empty = mkRdrQual modl $ mkVarOcc "empty"
, largeAnon_insert = mkRdrQual modl $ mkVarOcc "insert"
, largeAnon_applyPending = mkRdrQual modl $ mkVarOcc "applyPending"
, largeAnon_letRecordT = mkRdrQual modl $ mkVarOcc "letRecordT"
, largeAnon_letInsertAs = mkRdrQual modl $ mkVarOcc "letInsertAs"
}
where
modl :: ModuleName
modl = case mode of
Simple -> mkModuleName "Data.Record.Anon.Simple"
Advanced -> mkModuleName "Data.Record.Anon.Advanced"
{-------------------------------------------------------------------------------
Typelet
-------------------------------------------------------------------------------}
typelet :: ModuleName
typelet = mkModuleName "TypeLet"
typelet_castEqual :: RdrName
typelet_castEqual = mkRdrQual typelet $ mkVarOcc "castEqual"