packages feed

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"