language-haskell
Safe HaskellNone
LanguageHaskell2010

Language.Haskell.Binder

Description

Dimorphic attribute grammar for establishing the static identifier bindings

Synopsis

Main functions

withBindings :: (Traversable (Keep (Binder l p)) g, q ~ WithEnvironment l p) => Map Extension Bool -> ModuleEnvironment l -> Environment l -> p (g p p) -> q (g q q) Source #

Add the inherited and synthesized bindings to every node in the argument AST.

unboundNames :: forall l (p :: Type -> Type) g. Foldable (BindingVerifier l p) g => WithEnvironment l p (g (WithEnvironment l p) (WithEnvironment l p)) -> Unbound l Source #

Find all the names that have not been bound

Transformations

data Binder l (f :: Type -> Type) Source #

The transformation type used by withBindings

Instances

Instances details
Transformation (Keep (Binder l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

Associated Types

type Domain (Keep (Binder l f)) 
Instance details

Defined in Language.Haskell.Binder

type Domain (Keep (Binder l f)) = f
type Codomain (Keep (Binder l f)) 
Instance details

Defined in Language.Haskell.Binder

type Codomain (Keep (Binder l f))
type Codomain (Keep (Binder l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

type Codomain (Keep (Binder l f))
type Domain (Keep (Binder l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

type Domain (Keep (Binder l f)) = f

data BindingVerifier l (f :: Type -> Type) Source #

The transformation type folds the tree wrapped WithEnvironment to Unbound

Instances

Instances details
Transformation (BindingVerifier l f) Source # 
Instance details

Defined in Language.Haskell.Binder

Associated Types

type Domain (BindingVerifier l f) 
Instance details

Defined in Language.Haskell.Binder

type Codomain (BindingVerifier l f) 
Instance details

Defined in Language.Haskell.Binder

At (BindingVerifier l f) g Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

($) :: BindingVerifier l f -> Domain (BindingVerifier l f) g -> Codomain (BindingVerifier l f) g #

(Foldable f, Foldable (g (WithEnvironment l f)), Foldable (BindingVerifier l f) g, At (BindingVerifier l f) (g (WithEnvironment l f) (WithEnvironment l f))) => Foldable (BindingVerifier l f) g Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

foldMap :: (Codomain (BindingVerifier l f) ~ (Const m :: Type -> Type), Monoid m) => BindingVerifier l f -> Domain (BindingVerifier l f) (g (Domain (BindingVerifier l f)) (Domain (BindingVerifier l f))) -> m #

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (ClassInstanceLHS l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Constructor l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Context l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (DerivingClause l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Export l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Expression l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (FieldBinding l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (FieldPattern l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Pattern l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (ClassInstanceLHS l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Context l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Declaration l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Expression l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (FieldBinding l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (FieldPattern l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Type l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

type Codomain (BindingVerifier l f) Source # 
Instance details

Defined in Language.Haskell.Binder

type Domain (BindingVerifier l f) Source # 
Instance details

Defined in Language.Haskell.Binder

Node wrappers

type Attributes l = Atts (Environment l) (LocalEnvironment l) Source #

The inherited attributes are an Environment, the synthesized attributes a LocalEnvironment

type Environment l = UnionWith (Map (QualifiedName l)) (Binding l) Source #

Bindings of all names in scope

type LocalEnvironment l = UnionWith (Map (Name l)) (Binding l) Source #

Bindings of local names

type ModuleEnvironment l = UnionWith (Map (ModuleName l)) (LocalEnvironment l) Source #

Bindings of all names exported by the available modules

type WithEnvironment l = Compose ((,) (Attributes l)) :: (Type -> Type) -> Type -> Type Source #

Tree node wrapper carrying the Attributes

Binding types

data Binding l Source #

A binding for any single name

Instances

Instances details
Monoid (Binding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

mempty :: Binding l #

mappend :: Binding l -> Binding l -> Binding l #

mconcat :: [Binding l] -> Binding l #

Semigroup (Binding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

(<>) :: Binding l -> Binding l -> Binding l #

sconcat :: NonEmpty (Binding l) -> Binding l #

stimes :: Integral b => b -> Binding l -> Binding l #

Eq (Binding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

(==) :: Binding l -> Binding l -> Bool #

(/=) :: Binding l -> Binding l -> Bool #

Data l => Data (Binding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Binding l -> c (Binding l) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Binding l) #

toConstr :: Binding l -> Constr #

dataTypeOf :: Binding l -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Binding l)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Binding l)) #

gmapT :: (forall b. Data b => b -> b) -> Binding l -> Binding l #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Binding l -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Binding l -> r #

gmapQ :: (forall d. Data d => d -> u) -> Binding l -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Binding l -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Binding l -> m (Binding l) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Binding l -> m (Binding l) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Binding l -> m (Binding l) #

Show (Binding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

showsPrec :: Int -> Binding l -> ShowS #

show :: Binding l -> String #

showList :: [Binding l] -> ShowS #

(Functor (g (Compose ((,) (Attributes Language)) q)), Functor (Mapped ((,) (Attributes Language)) (Map q Placed)) g) => Functor (Mapped ((,) (Attributes Language)) (Map q Placed)) g Source # 
Instance details

Defined in Language.Haskell

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (ClassInstanceLHS l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Constructor l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Context l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (DerivingClause l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Export l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Expression l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (FieldBinding l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (FieldPattern l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Pattern l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (ClassInstanceLHS l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Context l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Declaration l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Expression l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (FieldBinding l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (FieldPattern l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

(Foldable f, QualifiedName l ~ QualifiedName l, Ord (ModuleName l), Ord (Name l)) => At (BindingVerifier l f) (Type l l (WithEnvironment l f) (WithEnvironment l f)) Source # 
Instance details

Defined in Language.Haskell.Binder

data BindingError l Source #

An erroneous binding

Instances

Instances details
Eq (BindingError l) Source # 
Instance details

Defined in Language.Haskell.Binder

Data l => Data (BindingError l) Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> BindingError l -> c (BindingError l) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (BindingError l) #

toConstr :: BindingError l -> Constr #

dataTypeOf :: BindingError l -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (BindingError l)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (BindingError l)) #

gmapT :: (forall b. Data b => b -> b) -> BindingError l -> BindingError l #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> BindingError l -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> BindingError l -> r #

gmapQ :: (forall d. Data d => d -> u) -> BindingError l -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> BindingError l -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> BindingError l -> m (BindingError l) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> BindingError l -> m (BindingError l) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> BindingError l -> m (BindingError l) #

Show (BindingError l) Source # 
Instance details

Defined in Language.Haskell.Binder

data TypeBinding l Source #

A binding for a type name

Constructors

TypeClass (LocalEnvironment l) 

Instances

Instances details
Eq (TypeBinding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Data l => Data (TypeBinding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> TypeBinding l -> c (TypeBinding l) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (TypeBinding l) #

toConstr :: TypeBinding l -> Constr #

dataTypeOf :: TypeBinding l -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (TypeBinding l)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (TypeBinding l)) #

gmapT :: (forall b. Data b => b -> b) -> TypeBinding l -> TypeBinding l #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> TypeBinding l -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> TypeBinding l -> r #

gmapQ :: (forall d. Data d => d -> u) -> TypeBinding l -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> TypeBinding l -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> TypeBinding l -> m (TypeBinding l) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> TypeBinding l -> m (TypeBinding l) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> TypeBinding l -> m (TypeBinding l) #

Show (TypeBinding l) Source # 
Instance details

Defined in Language.Haskell.Binder

data ValueBinding l Source #

A binding for a value name

Instances

Instances details
Eq (ValueBinding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Data l => Data (ValueBinding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ValueBinding l -> c (ValueBinding l) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ValueBinding l) #

toConstr :: ValueBinding l -> Constr #

dataTypeOf :: ValueBinding l -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (ValueBinding l)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (ValueBinding l)) #

gmapT :: (forall b. Data b => b -> b) -> ValueBinding l -> ValueBinding l #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ValueBinding l -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ValueBinding l -> r #

gmapQ :: (forall d. Data d => d -> u) -> ValueBinding l -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ValueBinding l -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ValueBinding l -> m (ValueBinding l) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ValueBinding l -> m (ValueBinding l) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ValueBinding l -> m (ValueBinding l) #

Show (ValueBinding l) Source # 
Instance details

Defined in Language.Haskell.Binder

Utility functions

lookupType :: QualifiedName l -> Environment l -> Maybe (TypeBinding l) Source #

Look up a type name in the environment

lookupValue :: QualifiedName l -> Environment l -> Maybe (ValueBinding l) Source #

Look up a value name in the environment

onMap :: (Map j a -> Map k b) -> UnionWith (Map j) a -> UnionWith (Map k) b Source #

Apply the function to the map inside UnionWith

preludeName :: Haskell l => ModuleName l Source #

The name of the Prelude module

baseName :: QualifiedName l -> Name l Source #

The local name part of a qualified name

unqualifiedName :: Haskell l => Name l -> QualifiedName l Source #

Turns a local name into a QualifiedName

Orphan instances

(Ord k, Eq v) => Eq (UnionWith (Map k) v) Source # 
Instance details

Methods

(==) :: UnionWith (Map k) v -> UnionWith (Map k) v -> Bool #

(/=) :: UnionWith (Map k) v -> UnionWith (Map k) v -> Bool #

(Ord k, Data k, Data v) => Data (UnionWith (Map k) v) Source # 
Instance details

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UnionWith (Map k) v -> c (UnionWith (Map k) v) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (UnionWith (Map k) v) #

toConstr :: UnionWith (Map k) v -> Constr #

dataTypeOf :: UnionWith (Map k) v -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (UnionWith (Map k) v)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (UnionWith (Map k) v)) #

gmapT :: (forall b. Data b => b -> b) -> UnionWith (Map k) v -> UnionWith (Map k) v #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> UnionWith (Map k) v -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> UnionWith (Map k) v -> r #

gmapQ :: (forall d. Data d => d -> u) -> UnionWith (Map k) v -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> UnionWith (Map k) v -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> UnionWith (Map k) v -> m (UnionWith (Map k) v) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> UnionWith (Map k) v -> m (UnionWith (Map k) v) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> UnionWith (Map k) v -> m (UnionWith (Map k) v) #

(Show k, Show v) => Show (UnionWith (Map k) v) Source # 
Instance details

Methods

showsPrec :: Int -> UnionWith (Map k) v -> ShowS #

show :: UnionWith (Map k) v -> String #

showList :: [UnionWith (Map k) v] -> ShowS #