haskell-names-0.5.0: Name resolution library for Haskell

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.Names.Open

Synopsis

Documentation

class Typeable a => Resolvable a where Source

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

Methods

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.

Constructors

Alg 

Fields

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

Constructors

WcField 

Fields

wcFieldName :: Name

the field's simple name

wcFieldModuleName :: ModuleName

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