haskell-names-0.9.4: 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 #

Instances
(Typeable a, GTraversable Resolvable a) => Resolvable a Source # 
Instance details

Defined in Language.Haskell.Names.Open.Base

Methods

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

Resolvable SrcSpan Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

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

Resolvable SrcSpanInfo Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

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

(Resolvable l, SrcInfo l, Data l) => Resolvable [Stmt l] Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => [Stmt l] -> Scope -> f [Stmt l] Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (Op l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => Op l -> Scope -> f (Op l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (Decl l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => Decl l -> Scope -> f (Decl l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (DeclHead l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => DeclHead l -> Scope -> f (DeclHead l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (InstRule l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => InstRule l -> Scope -> f (InstRule l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (Binds l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => Binds l -> Scope -> f (Binds l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (Match l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => Match l -> Scope -> f (Match l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (ConDecl l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => ConDecl l -> Scope -> f (ConDecl l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (FieldDecl l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => FieldDecl l -> Scope -> f (FieldDecl l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (ClassDecl l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => ClassDecl l -> Scope -> f (ClassDecl l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (InstDecl l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => InstDecl l -> Scope -> f (InstDecl l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (GuardedRhs l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => GuardedRhs l -> Scope -> f (GuardedRhs l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (Type l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => Type l -> Scope -> f (Type l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (Context l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => Context l -> Scope -> f (Context l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (Exp l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => Exp l -> Scope -> f (Exp l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (Pat l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => Pat l -> Scope -> f (Pat l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (PatField l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => PatField l -> Scope -> f (PatField l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (QualStmt l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => QualStmt l -> Scope -> f (QualStmt l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (FieldUpdate l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => FieldUpdate l -> Scope -> f (FieldUpdate l) Source #

(Resolvable l, SrcInfo l, Data l) => Resolvable (Alt l) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

rtraverse :: (Applicative f, ?alg :: Alg f) => Alt l -> Scope -> f (Alt l) Source #

Typeable a => Resolvable (Scoped a) Source # 
Instance details

Defined in Language.Haskell.Names.Open.Instances

Methods

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

newtype Alg w Source #

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

Constructors

Alg 

Fields

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, instanceQualification, wcNames. If we enter an instance with a qualified class name we have to remember the qualification to resolve method names.

data NameContext Source #

Describes how we should treat names in the current context

Constructors

BindingT 
BindingV 
ReferenceT 
ReferenceV 
ReferenceUV

Reference a method in an instance declaration Unqualified names also match qualified names in scope https://www.haskell.org/pipermail/haskell-prime/2008-April/002569.html

ReferenceUT

Reference an associated type in an instance declaration Unqualified names also match qualified names in scope https://www.haskell.org/pipermail/haskell-prime/2008-April/002569.html

ReferenceRS

Reference a record field selector

SignatureV

A type signature contains an always unqualified Name that always refers to a value bound in the same module.

Other 

initialScope :: ModuleName () -> 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