| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Agda.Syntax.Concrete.Name
Contents
Description
Names in the concrete syntax are just strings (or lists of strings for qualified names).
Synopsis
- data Name
- isOpenMixfix :: Name -> Bool
- data NamePart
- data QName
- data TopLevelModuleName = TopLevelModuleName {}
- nameToRawName :: Name -> RawName
- nameParts :: Name -> [NamePart]
- nameStringParts :: Name -> [RawName]
- stringNameParts :: String -> [NamePart]
- class NumHoles a where
- isOperator :: Name -> Bool
- isHole :: NamePart -> Bool
- isPrefix :: Name -> Bool
- isPostfix :: Name -> Bool
- isInfix :: Name -> Bool
- isNonfix :: Name -> Bool
- qualify :: QName -> Name -> QName
- unqualify :: QName -> Name
- qnameParts :: QName -> [Name]
- isQualified :: QName -> Bool
- toTopLevelModuleName :: QName -> TopLevelModuleName
- moduleNameToFileName :: TopLevelModuleName -> String -> FilePath
- projectRoot :: AbsolutePath -> TopLevelModuleName -> AbsolutePath
- noName_ :: Name
- noName :: Range -> Name
- class IsNoName a where
Documentation
A name is a non-empty list of alternating Ids and Holes. A normal name
is represented by a singleton list, and operators are represented by a list
with Holes where the arguments should go. For instance: [Hole,Id "+",Hole]
is infix addition.
Equality and ordering on Names are defined to ignore range so same names
in different locations are equal.
Instances
| Eq Name # | Define equality on Is there a reason not to do this? -Jeff No. But there are tons of reasons to do it. For instance, when using names as keys in maps you really don't want to have to get the range right to be able to do a lookup. -Ulf |
| Data Name # | |
Defined in Agda.Syntax.Concrete.Name Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Name -> c Name # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Name # dataTypeOf :: Name -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Name) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Name) # gmapT :: (forall b. Data b => b -> b) -> Name -> Name # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Name -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Name -> r # gmapQ :: (forall d. Data d => d -> u) -> Name -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Name -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Name -> m Name # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Name -> m Name # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Name -> m Name # | |
| Ord Name # | |
| Show Name # | |
| NFData Name # | Ranges are not forced. |
Defined in Agda.Syntax.Concrete.Name | |
| Pretty Name # | |
Defined in Agda.Syntax.Concrete.Name | |
| KillRange Name # | |
Defined in Agda.Syntax.Concrete.Name Methods killRange :: KillRangeT Name # | |
| SetRange Name # | |
| HasRange Name # | |
Defined in Agda.Syntax.Concrete.Name | |
| Underscore Name # | |
Defined in Agda.Syntax.Concrete.Name | |
| IsNoName Name # | |
Defined in Agda.Syntax.Concrete.Name | |
| NumHoles Name # | |
Defined in Agda.Syntax.Concrete.Name | |
| ExprLike Name # | |
| SubstExpr Name # | |
| EmbPrj Name # | |
| PrettyTCM Name # | |
| ToConcrete Name Name # | |
Defined in Agda.Syntax.Translation.AbstractToConcrete | |
| ToConcrete BindName Name # | |
Defined in Agda.Syntax.Translation.AbstractToConcrete | |
| Pretty (ThingWithFixity Name) # | |
Defined in Agda.Syntax.Concrete.Pretty Methods pretty :: ThingWithFixity Name -> Doc # prettyPrec :: Int -> ThingWithFixity Name -> Doc # prettyList :: [ThingWithFixity Name] -> Doc # | |
| ToAbstract (NewName Name) Name # | |
Defined in Agda.Syntax.Translation.ConcreteToAbstract | |
| ToConcrete (Maybe QName) (Maybe Name) # | |
isOpenMixfix :: Name -> Bool #
An open mixfix identifier is either prefix, infix, or suffix.
That is to say: at least one of its extremities is a Hole
Mixfix identifiers are composed of words and holes,
e.g. _+_ or if_then_else_ or [_/_].
Instances
| Eq NamePart # | |
| Data NamePart # | |
Defined in Agda.Syntax.Concrete.Name Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NamePart -> c NamePart # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c NamePart # toConstr :: NamePart -> Constr # dataTypeOf :: NamePart -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c NamePart) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c NamePart) # gmapT :: (forall b. Data b => b -> b) -> NamePart -> NamePart # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NamePart -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NamePart -> r # gmapQ :: (forall d. Data d => d -> u) -> NamePart -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> NamePart -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> NamePart -> m NamePart # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NamePart -> m NamePart # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NamePart -> m NamePart # | |
| Ord NamePart # | |
Defined in Agda.Syntax.Concrete.Name | |
| Show NamePart # | |
| Generic NamePart # | |
| NFData NamePart # | |
Defined in Agda.Syntax.Concrete.Name | |
| Pretty NamePart # | |
Defined in Agda.Syntax.Concrete.Name | |
| EmbPrj NamePart # | |
| NumHoles [NamePart] # | |
Defined in Agda.Syntax.Concrete.Name | |
| type Rep NamePart # | |
Defined in Agda.Syntax.Concrete.Name type Rep NamePart = D1 (MetaData "NamePart" "Agda.Syntax.Concrete.Name" "Agda-2.5.4-BdDHVHYPm5JDI57G7c5E26" False) (C1 (MetaCons "Hole" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "Id" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 RawName))) | |
QName is a list of namespaces and the name of the constant.
For the moment assumes namespaces are just Names and not
explicitly applied modules.
Also assumes namespaces are generative by just using derived
equality. We will have to define an equality instance to
non-generative namespaces (as well as having some sort of
lookup table for namespace names).
Instances
data TopLevelModuleName #
Top-level module names. Used in connection with the file system.
Invariant: The list must not be empty.
Constructors
| TopLevelModuleName | |
Fields
| |
Instances
Operations on Name and NamePart
nameToRawName :: Name -> RawName #
nameStringParts :: Name -> [RawName] #
stringNameParts :: String -> [NamePart] #
Parse a string to parts of a concrete name.
Note: stringNameParts "_" == [Id "_"] == nameParts NoName{}
Number of holes in a Name (i.e., arity of a mixfix-operator).
Minimal complete definition
Instances
| NumHoles QName # | |
Defined in Agda.Syntax.Concrete.Name | |
| NumHoles Name # | |
Defined in Agda.Syntax.Concrete.Name | |
| NumHoles AmbiguousQName # | We can have an instance for ambiguous names as all share a common concrete name. |
Defined in Agda.Syntax.Abstract.Name Methods numHoles :: AmbiguousQName -> Int # | |
| NumHoles QName # | |
Defined in Agda.Syntax.Abstract.Name | |
| NumHoles Name # | |
Defined in Agda.Syntax.Abstract.Name | |
| NumHoles [NamePart] # | |
Defined in Agda.Syntax.Concrete.Name | |
isOperator :: Name -> Bool #
Is the name an operator?
Operations on qualified names
qnameParts :: QName -> [Name] #
qnameParts A.B.x = [A, B, x]
isQualified :: QName -> Bool #
Is the name qualified?
Operations on TopLevelModuleName
toTopLevelModuleName :: QName -> TopLevelModuleName #
Turns a qualified name into a TopLevelModuleName. The qualified
name is assumed to represent a top-level module name.
moduleNameToFileName :: TopLevelModuleName -> String -> FilePath #
Turns a top-level module name into a file name with the given suffix.
projectRoot :: AbsolutePath -> TopLevelModuleName -> AbsolutePath #
Finds the current project's "root" directory, given a project file and the corresponding top-level module name.
Example: If the module "A.B.C" is located in the file "fooABC.agda", then the root is "foo".
Precondition: The module name must be well-formed.
No name stuff
Check whether a name is the empty name "_".
Minimal complete definition
Instances
| IsNoName String # | |
Defined in Agda.Syntax.Concrete.Name | |
| IsNoName ByteString # | |
Defined in Agda.Syntax.Concrete.Name Methods isNoName :: ByteString -> Bool # | |
| IsNoName QName # | |
Defined in Agda.Syntax.Concrete.Name | |
| IsNoName Name # | |
Defined in Agda.Syntax.Concrete.Name | |
| IsNoName Name # | An abstract name is empty if its concrete name is empty. |
Defined in Agda.Syntax.Abstract.Name | |