Safe Haskell | None |
---|---|
Language | Haskell2010 |
Agda.Syntax.Abstract.Name
Contents
Description
Abstract names carry unique identifiers and stuff.
- data Name = Name {
- nameId :: !NameId
- nameConcrete :: Name
- nameBindingSite :: Range
- nameFixity :: Fixity'
- data QName = QName {}
- data QNamed a = QNamed {}
- newtype ModuleName = MName {
- mnameToList :: [Name]
- newtype AmbiguousQName = AmbQ {}
- class IsProjP a where
- isAnonymousModuleName :: ModuleName -> Bool
- withRangesOf :: ModuleName -> [Name] -> ModuleName
- withRangesOfQ :: ModuleName -> QName -> ModuleName
- mnameFromList :: [Name] -> ModuleName
- noModuleName :: ModuleName
- commonParentModule :: ModuleName -> ModuleName -> ModuleName
- class MkName a where
- qnameToList :: QName -> [Name]
- qnameFromList :: [Name] -> QName
- qnameToMName :: QName -> ModuleName
- mnameToQName :: ModuleName -> QName
- showQNameId :: QName -> String
- qnameToConcrete :: QName -> QName
- mnameToConcrete :: ModuleName -> QName
- toTopLevelModuleName :: ModuleName -> TopLevelModuleName
- qualifyM :: ModuleName -> ModuleName -> ModuleName
- qualifyQ :: ModuleName -> QName -> QName
- qualify :: ModuleName -> Name -> QName
- qualify_ :: Name -> QName
- isOperator :: QName -> Bool
- isSubModuleOf :: ModuleName -> ModuleName -> Bool
- isInModule :: QName -> ModuleName -> Bool
- nextName :: Name -> Name
- class IsNoName a where
Documentation
A name is a unique identifier and a suggestion for a concrete name. The concrete name contains the source location (if any) of the name. The source location of the binding site is also recorded.
Constructors
Name | |
Fields
|
Instances
Eq Name # | |
Ord Name # | |
Show Name # | Only use this |
NFData Name # | The range is not forced. |
Hashable Name # | |
Pretty Name # | |
KillRange Name # | |
SetRange Name # | |
HasRange Name # | |
IsNoName Name # | An abstract name is empty if its concrete name is empty. |
NumHoles Name # | |
AddContext Name # | |
PrettyTCM Name # | |
InstantiateFull Name # | |
ToConcrete Name Name # | |
Reify Name Name # | |
Suggest Name (Abs b) # | |
ToAbstract Pattern (Names, Pattern) # | |
AddContext (Dom (Name, Type)) # | |
ToAbstract (NewName Name) Name # | |
ToAbstract (NewName BoundName) Name # | |
ToAbstract r a => ToAbstract (Abs r) (a, Name) # | |
(Free i, Reify i a) => Reify (Abs i) (Name, a) # | |
AddContext ([WithHiding Name], Dom Type) # | |
AddContext ([Name], Dom Type) # | |
AddContext (Name, Dom Type) # | |
ToAbstract r Expr => ToAbstract (Dom r, Name) TypedBindings # | |
Qualified names are non-empty lists of names. Equality on qualified names are just equality on the last name, i.e. the module part is just for show.
The SetRange
instance for qualified names sets all individual
ranges (including those of the module prefix) to the given one.
Constructors
QName | |
Fields
|
Instances
Eq QName # | |
Ord QName # | |
Show QName # | Only use this |
NFData QName # | |
Hashable QName # | |
Pretty QName # | |
Sized QName # | |
KillRange QName # | |
KillRange RewriteRuleMap # | |
KillRange Definitions # | |
SetRange QName # | |
HasRange QName # | |
NumHoles QName # | |
AllNames QName # | |
ExprLike QName # | |
TermLike QName # | |
NamesIn QName # | |
PrettyTCM QName # | |
InstantiateFull QName # | |
Occurs QName # | |
FromTerm QName # | |
ToTerm QName # | |
PrimTerm QName # | |
Unquote QName # | |
UniverseBi Declaration QName # | |
ToConcrete QName QName # | |
(Show a, ToQName a) => ToAbstract (OldName a) QName # | |
ToConcrete (Maybe QName) (Maybe Name) # | |
Something preceeded by a qualified name.
newtype ModuleName #
A module name is just a qualified name.
The SetRange
instance for module names sets all individual ranges
to the given one.
Constructors
MName | |
Fields
|
Instances
Eq ModuleName # | |
Ord ModuleName # | |
Show ModuleName # | Only use this |
NFData ModuleName # | |
Pretty ModuleName # | |
Sized ModuleName # | |
KillRange ModuleName # | |
KillRange Sections # | |
SetRange ModuleName # | |
HasRange ModuleName # | |
SubstExpr ModuleName # | |
ExprLike ModuleName # | |
PrettyTCM ModuleName # | |
InstantiateFull ModuleName # | |
UniverseBi Declaration ModuleName # | |
ToConcrete ModuleName QName # | |
ToAbstract OldModuleName ModuleName # | |
ToAbstract NewModuleQName ModuleName # | |
ToAbstract NewModuleName ModuleName # | |
ToAbstract ModuleAssignment (ModuleName, [LetBinding]) # | |
newtype AmbiguousQName #
Ambiguous qualified names. Used for overloaded constructors.
Invariant: All the names in the list must have the same concrete,
unqualified name. (This implies that they all have the same Range
).
Instances
Eq AmbiguousQName # | |
Ord AmbiguousQName # | |
Show AmbiguousQName # | |
Pretty AmbiguousQName # | |
KillRange AmbiguousQName # | |
HasRange AmbiguousQName # | The range of an |
NumHoles AmbiguousQName # | We can have an instance for ambiguous names as all share a common concrete name. |
NamesIn AmbiguousQName # | |
UniverseBi Declaration AmbiguousQName # | |
Check whether we are a projection pattern.
Minimal complete definition
Methods
isProjP :: a -> Maybe (ProjOrigin, AmbiguousQName) #
isAnonymousModuleName :: ModuleName -> Bool #
A module is anonymous if the qualification path ends in an underscore.
withRangesOf :: ModuleName -> [Name] -> ModuleName #
Sets the ranges of the individual names in the module name to
match those of the corresponding concrete names. If the concrete
names are fewer than the number of module name name parts, then the
initial name parts get the range noRange
.
C.D.E `withRangesOf` [A, B]
returns C.D.E
but with ranges set
as follows:
C
:noRange
.D
: the range ofA
.E
: the range ofB
.
Precondition: The number of module name name parts has to be at least as large as the length of the list.
withRangesOfQ :: ModuleName -> QName -> ModuleName #
Like withRangesOf
, but uses the name parts (qualifier + name)
of the qualified name as the list of concrete names.
mnameFromList :: [Name] -> ModuleName #
commonParentModule :: ModuleName -> ModuleName -> ModuleName #
Make a Name
from some kind of string.
Minimal complete definition
qnameToList :: QName -> [Name] #
qnameFromList :: [Name] -> QName #
qnameToMName :: QName -> ModuleName #
mnameToQName :: ModuleName -> QName #
showQNameId :: QName -> String #
qnameToConcrete :: QName -> QName #
Turn a qualified name into a concrete name. This should only be used as a fallback when looking up the right concrete name in the scope fails.
mnameToConcrete :: ModuleName -> QName #
toTopLevelModuleName :: ModuleName -> TopLevelModuleName #
Computes the TopLevelModuleName
corresponding to the given
module name, which is assumed to represent a top-level module name.
Precondition: The module name must be well-formed.
qualifyM :: ModuleName -> ModuleName -> ModuleName #
qualifyQ :: ModuleName -> QName -> QName #
qualify :: ModuleName -> Name -> QName #
isOperator :: QName -> Bool #
Is the name an operator?
isSubModuleOf :: ModuleName -> ModuleName -> Bool #
isInModule :: QName -> ModuleName -> Bool #
Get the next version of the concrete name. For instance, nextName "x" = "x₁"
.
The name must not be a NoName
.