| Copyright | (c) 2014 Aleksey Kliger |
|---|---|
| License | BSD3 (See LICENSE) |
| Maintainer | Aleksey Kliger |
| Stability | experimental |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Unbound.Generics.LocallyNameless.Name
Description
Names stand for values. They may be bound or free.
Synopsis
Names over terms
An abstract datatype of names Name a that stand for terms of
type a. The type a is used as a tag to distinguish these names
from names that may stand for other sorts of terms.
Two names in a term are consider
aeq equal when they
are the same name (in the sense of '(==)'). In patterns, however,
any two names are equal if they occur in the same place within the
pattern. This induces alpha equivalence on terms in general.
Names may either be free or bound (see isFreeName). Free names
may be extracted from patterns using
isPat. Bound names
cannot be.
Instances
isFreeName :: Name a -> Bool #
Returns True iff the given Name a is free.
Name construction
string2Name :: String -> Name a #
Make a free 'Name a' from a String
Synonym for string2Name.
Name inspection
name2String :: Name a -> String #
Get the string part of a Name.
name2Integer :: Name a -> Integer #
Get the integer part of a Name.
Heterogeneous names
An AnyName is a name that stands for a term of some (existentially hidden) type.
Instances
| Eq AnyName # | |
| Ord AnyName # | |
Defined in Unbound.Generics.LocallyNameless.Name | |
| Show AnyName # | |
| Alpha AnyName # | |
Defined in Unbound.Generics.LocallyNameless.Alpha Methods aeq' :: AlphaCtx -> AnyName -> AnyName -> Bool # fvAny' :: (Contravariant f, Applicative f) => AlphaCtx -> (AnyName -> f AnyName) -> AnyName -> f AnyName # close :: AlphaCtx -> NamePatFind -> AnyName -> AnyName # open :: AlphaCtx -> NthPatFind -> AnyName -> AnyName # isPat :: AnyName -> DisjointSet AnyName # nthPatFind :: AnyName -> NthPatFind # namePatFind :: AnyName -> NamePatFind # swaps' :: AlphaCtx -> Perm AnyName -> AnyName -> AnyName # lfreshen' :: LFresh m => AlphaCtx -> AnyName -> (AnyName -> Perm AnyName -> m b) -> m b # freshen' :: Fresh m => AlphaCtx -> AnyName -> m (AnyName, Perm AnyName) # | |
| Subst b AnyName # | |