large-records-0.1.0.0: Efficient compilation for large records, linear in the size of the record
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Record.Internal.TH.Name

Description

Names with statically known flavour

Intended for qualified import.

Synopsis

Names

data Name :: NameSpace -> Flavour -> Type where Source #

Like TH's Name, but with statically known flavour.

Constructors

Name :: OccName -> NameFlavour flavour -> Name ns flavour 

Instances

Instances details
Eq (Name ns flavour) Source # 
Instance details

Defined in Data.Record.Internal.TH.Name

Methods

(==) :: Name ns flavour -> Name ns flavour -> Bool #

(/=) :: Name ns flavour -> Name ns flavour -> Bool #

Ord (Name ns flavour) Source # 
Instance details

Defined in Data.Record.Internal.TH.Name

Methods

compare :: Name ns flavour -> Name ns flavour -> Ordering #

(<) :: Name ns flavour -> Name ns flavour -> Bool #

(<=) :: Name ns flavour -> Name ns flavour -> Bool #

(>) :: Name ns flavour -> Name ns flavour -> Bool #

(>=) :: Name ns flavour -> Name ns flavour -> Bool #

max :: Name ns flavour -> Name ns flavour -> Name ns flavour #

min :: Name ns flavour -> Name ns flavour -> Name ns flavour #

Show (Name ns flavour) Source # 
Instance details

Defined in Data.Record.Internal.TH.Name

Methods

showsPrec :: Int -> Name ns flavour -> ShowS #

show :: Name ns flavour -> String #

showList :: [Name ns flavour] -> ShowS #

data Flavour Source #

Name flavours (used as a kind, not as a type)

Technically speaking there is one flavour missing: names that are locally bound, but outside of the TH quote, something like

foo x = [| .. x .. |]

However, we won't actually deal with such names.

Constructors

Dynamic

Dynamically bound

Dynamically bound names will be bound to a global name by ghc after splicing the TH generated Haskelll code.

These are generated with mkName (also used by haskell-src-meta).

Unique

A new name

These are names either generated by newName or are new names in a TH declaration quote [d| ... |].

Global

Reference to a specific name defined outside of the TH quote

data NameFlavour :: Flavour -> Type where Source #

Constructors

NameDynamic :: Maybe ModName -> NameFlavour 'Dynamic

Dynamically bound name, with an optional module prefix (T.foo)

NameUnique :: Uniq -> NameFlavour 'Unique

Unique local name

NameGlobal :: NameSpace -> PkgName -> ModName -> NameFlavour 'Global

Global name bound outside of the TH quot

Instances

Instances details
Eq (NameFlavour flavour) Source # 
Instance details

Defined in Data.Record.Internal.TH.Name

Methods

(==) :: NameFlavour flavour -> NameFlavour flavour -> Bool #

(/=) :: NameFlavour flavour -> NameFlavour flavour -> Bool #

Ord (NameFlavour flavour) Source # 
Instance details

Defined in Data.Record.Internal.TH.Name

Methods

compare :: NameFlavour flavour -> NameFlavour flavour -> Ordering #

(<) :: NameFlavour flavour -> NameFlavour flavour -> Bool #

(<=) :: NameFlavour flavour -> NameFlavour flavour -> Bool #

(>) :: NameFlavour flavour -> NameFlavour flavour -> Bool #

(>=) :: NameFlavour flavour -> NameFlavour flavour -> Bool #

max :: NameFlavour flavour -> NameFlavour flavour -> NameFlavour flavour #

min :: NameFlavour flavour -> NameFlavour flavour -> NameFlavour flavour #

Show (NameFlavour flavour) Source # 
Instance details

Defined in Data.Record.Internal.TH.Name

Methods

showsPrec :: Int -> NameFlavour flavour -> ShowS #

show :: NameFlavour flavour -> String #

showList :: [NameFlavour flavour] -> ShowS #

Simple functions

nameBase :: Name ns flavour -> String Source #

mapNameBase :: (String -> String) -> Name ns flavour -> Name ns' flavour Source #

Modify the unqualified part of the name

Since we often to do this derive one kind of name from another, the namespace of the result is not related to the namespace of the argument.

Working with qualified names

data Qualifier Source #

Constructors

Unqual 
Qual ModName 

Fresh names

Conversion

fromTH :: IsFlavour flavour => Name -> Maybe (Name ns flavour) Source #

Translate from a dynamically typed TH name

Returns Nothing if the TH name does not have the specified flavour.

fromTH' :: forall ns flavour. IsFlavour flavour => Name -> Name ns flavour Source #

Variation on fromTH that throws an exception on a flavour mismatch

toTH :: Name ns flavour -> Name Source #

Forget type level information

Resolution

class LookupName ns where Source #

Methods

lookupName :: Quasi m => Name ns 'Dynamic -> m (Maybe (Name ns 'Global)) Source #

Resolve existing name

Instances

Instances details
LookupName 'TcClsName Source # 
Instance details

Defined in Data.Record.Internal.TH.Name

LookupName 'DataName Source # 
Instance details

Defined in Data.Record.Internal.TH.Name

LookupName 'VarName Source # 
Instance details

Defined in Data.Record.Internal.TH.Name

reify :: Quasi m => Name ns 'Global -> m Info Source #

Get info about the given name

Only global names can be reified. See lookupName.

Construct TH

classD :: _ -> Name 'TcClsName 'Dynamic -> _ Source #

Define class

conE :: Name 'DataName flavour -> _ Source #

Reference constructor

conT :: Name 'TcClsName flavour -> _ Source #

Reference type

newtypeD :: _ -> Name 'TcClsName 'Dynamic -> _ Source #

Define newtype

patSynD :: Name 'DataName 'Dynamic -> _ Source #

Define pattern synonym

patSynSigD :: Name 'DataName 'Dynamic -> _ Source #

Define pattern synonym signature

pragCompleteD :: [Name 'DataName 'Dynamic] -> Maybe (Name 'TcClsName 'Dynamic) -> _ Source #

Define COMPLETE pragma

recC :: Name 'DataName 'Dynamic -> _ Source #

Define record constructor

recordPatSyn :: [String] -> _ Source #

Define record pattern synonym

sigD :: Name 'VarName 'Dynamic -> _ Source #

Define function signature

varBangType :: Name 'VarName 'Dynamic -> _ Source #

Define record field signature

varE :: Name 'VarName flavour -> _ Source #

Reference variable

varLocalP :: Name 'VarName 'Unique -> _ Source #

Define pattern variable for use in a local pattern match

varGlobalP :: Name 'VarName 'Dynamic -> _ Source #

Define pattern variable for use in a record pattern synonym