haskell-names-0.4.1: Name resolution library for Haskell

Safe HaskellNone




class Typeable a => Resolvable a where Source

A type that implements Resolvable provides a way to perform a shallow scope-aware traversal.


rtraverse :: (Applicative f, ?alg :: Alg f) => a -> Scope -> f a Source

newtype Alg w Source

The algebra for rtraverse. It's newtype-wrapped because an implicit parameter cannot be polymorphic.




runAlg :: forall d. Resolvable d => d -> Scope -> w d

rmap :: Resolvable a => (forall b. Resolvable b => Scope -> b -> b) -> Scope -> a -> a Source

Analogous to gmap, but for Resolvable

rfoldMap :: (Monoid r, Resolvable a) => (forall b. Resolvable b => Scope -> b -> r) -> Scope -> a -> r Source

Analogous to gmap, but for Resolvable

data Scope Source

Contains information about the node's enclosing scope. Can be accessed through the lenses: gTable, lTable, nameCtx, wcNames.

data NameContext Source

Describes how we should treat names in the current context

initialScope :: Table -> Scope Source

Create an initial scope

type WcNames = [WcField] Source

Information about the names being introduced by a record wildcard

During resolving traversal, we always (lazily) construct this list when we process PRec or RecConstr, even if it doesn't contain a wildcard.

Then, if the pattern or construction actually contains a wildcard, we use the computed value.

data WcField Source

Information about a field in the wildcard




wcFieldName :: Name ()

the field's simple name

wcFieldOrigName :: OrigName

the field's original name

wcExistsGlobalValue :: Bool

whether there is a global value in scope with the same name as the field but different from the field selector