-- | Names for GHC generics
--
-- We cannot make this part of the main ghcGenerics, because the names clash
-- with @large-records@ generics.
module Data.Record.Internal.Plugin.Names.GhcGenerics (
    type_Generic
  , unq_type_Rep
  , unq_from
  , unq_to
  ) where

import Data.Record.Internal.GHC.Shim

{-------------------------------------------------------------------------------
  Names of GHC.Generics
-------------------------------------------------------------------------------}

type_Generic :: LRdrName
type_Generic :: LRdrName
type_Generic = String -> LRdrName
nameQT String
"Generic"

unq_type_Rep :: LRdrName
unq_type_Rep :: LRdrName
unq_type_Rep = String -> LRdrName
nameUT String
"Rep"

unq_from, unq_to :: LRdrName
unq_from :: LRdrName
unq_from = String -> LRdrName
nameUV String
"from"
unq_to :: LRdrName
unq_to   = String -> LRdrName
nameUV String
"to"

{-------------------------------------------------------------------------------
  Internal auxiliary

  NOTE: Unqualified names are used when generating class instances.
-------------------------------------------------------------------------------}

ghcGenerics :: ModuleName
ghcGenerics :: ModuleName
ghcGenerics = String -> ModuleName
mkModuleName String
"GHC.Generics"

nameQT :: String -> LRdrName
nameQT :: String -> LRdrName
nameQT String
var = SrcSpanLess LRdrName -> LRdrName
forall a. HasSrcSpan a => SrcSpanLess a -> a
noLoc (SrcSpanLess LRdrName -> LRdrName)
-> SrcSpanLess LRdrName -> LRdrName
forall a b. (a -> b) -> a -> b
$ ModuleName -> OccName -> RdrName
mkRdrQual ModuleName
ghcGenerics (OccName -> RdrName) -> OccName -> RdrName
forall a b. (a -> b) -> a -> b
$ String -> OccName
mkTcOcc   String
var

nameUV, nameUT :: String -> LRdrName
nameUV :: String -> LRdrName
nameUV String
var = SrcSpanLess LRdrName -> LRdrName
forall a. HasSrcSpan a => SrcSpanLess a -> a
noLoc (SrcSpanLess LRdrName -> LRdrName)
-> SrcSpanLess LRdrName -> LRdrName
forall a b. (a -> b) -> a -> b
$ OccName -> RdrName
mkRdrUnqual (OccName -> RdrName) -> OccName -> RdrName
forall a b. (a -> b) -> a -> b
$ String -> OccName
mkVarOcc String
var
nameUT :: String -> LRdrName
nameUT String
var = SrcSpanLess LRdrName -> LRdrName
forall a. HasSrcSpan a => SrcSpanLess a -> a
noLoc (SrcSpanLess LRdrName -> LRdrName)
-> SrcSpanLess LRdrName -> LRdrName
forall a b. (a -> b) -> a -> b
$ OccName -> RdrName
mkRdrUnqual (OccName -> RdrName) -> OccName -> RdrName
forall a b. (a -> b) -> a -> b
$ String -> OccName
mkTcOcc  String
var