Safe Haskell | None |
---|---|
Language | Haskell2010 |
Language.Haskell.Binder
Description
Dimorphic attribute grammar for establishing the static identifier bindings
Synopsis
- 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)
- unboundNames :: forall l (p :: Type -> Type) g. Foldable (BindingVerifier l p) g => WithEnvironment l p (g (WithEnvironment l p) (WithEnvironment l p)) -> Unbound l
- data Binder l (f :: Type -> Type)
- data BindingVerifier l (f :: Type -> Type)
- type Attributes l = Atts (Environment l) (LocalEnvironment l)
- type Environment l = UnionWith (Map (QualifiedName l)) (Binding l)
- type LocalEnvironment l = UnionWith (Map (Name l)) (Binding l)
- type ModuleEnvironment l = UnionWith (Map (ModuleName l)) (LocalEnvironment l)
- type WithEnvironment l = Compose ((,) (Attributes l)) :: (Type -> Type) -> Type -> Type
- data Binding l
- = ErroneousBinding (BindingError l)
- | TypeBinding (TypeBinding l)
- | ValueBinding (ValueBinding l)
- | TypeAndValueBinding (TypeBinding l) (ValueBinding l)
- data BindingError l
- = ClashingBindings (Binding l) (Binding l)
- | DuplicateInfixDeclaration (ValueBinding l) (ValueBinding l)
- | DuplicateRecordField
- data TypeBinding l = TypeClass (LocalEnvironment l)
- data ValueBinding l
- = InfixDeclaration (Associativity l) Int (Maybe (ValueBinding l))
- | RecordConstructor (LocalEnvironment l)
- | RecordField
- lookupType :: QualifiedName l -> Environment l -> Maybe (TypeBinding l)
- lookupValue :: QualifiedName l -> Environment l -> Maybe (ValueBinding l)
- onMap :: (Map j a -> Map k b) -> UnionWith (Map j) a -> UnionWith (Map k) b
- preludeName :: Haskell l => ModuleName l
- baseName :: QualifiedName l -> Name l
- unqualifiedName :: Haskell l => Name l -> QualifiedName l
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
Transformation (Keep (Binder l f)) Source # | |
Defined in Language.Haskell.Binder | |
type Codomain (Keep (Binder l f)) Source # | |
Defined in Language.Haskell.Binder | |
type Domain (Keep (Binder l f)) Source # | |
Defined in Language.Haskell.Binder |
data BindingVerifier l (f :: Type -> Type) Source #
The transformation type folds the tree wrapped WithEnvironment
to Unbound
Instances
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 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
A binding for any single name
Constructors
ErroneousBinding (BindingError l) | |
TypeBinding (TypeBinding l) | |
ValueBinding (ValueBinding l) | |
TypeAndValueBinding (TypeBinding l) (ValueBinding l) |
Instances
Monoid (Binding l) Source # | |
Semigroup (Binding l) Source # | |
Eq (Binding l) Source # | |
Data l => Data (Binding l) Source # | |
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 # | |
(Functor (g (Compose ((,) (Attributes Language)) q)), Functor (Mapped ((,) (Attributes Language)) (Map q Placed)) g) => Functor (Mapped ((,) (Attributes Language)) (Map q Placed)) g Source # | |
Defined in Language.Haskell Methods (<$>) :: Mapped ((,) (Attributes Language)) (Map q Placed) -> Domain (Mapped ((,) (Attributes Language)) (Map q Placed)) (g (Domain (Mapped ((,) (Attributes Language)) (Map q Placed))) (Domain (Mapped ((,) (Attributes Language)) (Map q Placed)))) -> Codomain (Mapped ((,) (Attributes Language)) (Map q Placed)) (g (Codomain (Mapped ((,) (Attributes Language)) (Map q Placed))) (Codomain (Mapped ((,) (Attributes Language)) (Map q Placed)))) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (ClassInstanceLHS l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (ClassInstanceLHS l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (Constructor l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (Constructor l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (Context l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (Context l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (DerivingClause l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (DerivingClause l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (Export l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (Export l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (Expression l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (Expression l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (FieldBinding l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (FieldBinding l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (FieldPattern l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (FieldPattern l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (Pattern l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (Pattern l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (ClassInstanceLHS l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (ClassInstanceLHS l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (Context l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (Context l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (Declaration l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (Declaration l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (Expression l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (Expression l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (FieldBinding l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (FieldBinding l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (FieldPattern l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (FieldPattern l l (WithEnvironment l f) (WithEnvironment l f)) # | |
(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 # | |
Defined in Language.Haskell.Binder Methods ($) :: BindingVerifier l f -> Domain (BindingVerifier l f) (Type l l (WithEnvironment l f) (WithEnvironment l f)) -> Codomain (BindingVerifier l f) (Type l l (WithEnvironment l f) (WithEnvironment l f)) # |
data BindingError l Source #
An erroneous binding
Constructors
ClashingBindings (Binding l) (Binding l) | |
DuplicateInfixDeclaration (ValueBinding l) (ValueBinding l) | |
DuplicateRecordField |
Instances
Eq (BindingError l) Source # | |
Defined in Language.Haskell.Binder Methods (==) :: BindingError l -> BindingError l -> Bool # (/=) :: BindingError l -> BindingError l -> Bool # | |
Data l => Data (BindingError l) Source # | |
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 # | |
Defined in Language.Haskell.Binder Methods showsPrec :: Int -> BindingError l -> ShowS # show :: BindingError l -> String # showList :: [BindingError l] -> ShowS # |
data TypeBinding l Source #
A binding for a type name
Constructors
TypeClass (LocalEnvironment l) |
Instances
Eq (TypeBinding l) Source # | |
Defined in Language.Haskell.Binder Methods (==) :: TypeBinding l -> TypeBinding l -> Bool # (/=) :: TypeBinding l -> TypeBinding l -> Bool # | |
Data l => Data (TypeBinding l) Source # | |
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 # | |
Defined in Language.Haskell.Binder Methods showsPrec :: Int -> TypeBinding l -> ShowS # show :: TypeBinding l -> String # showList :: [TypeBinding l] -> ShowS # |
data ValueBinding l Source #
A binding for a value name
Constructors
InfixDeclaration (Associativity l) Int (Maybe (ValueBinding l)) | |
RecordConstructor (LocalEnvironment l) | |
RecordField |
Instances
Eq (ValueBinding l) Source # | |
Defined in Language.Haskell.Binder Methods (==) :: ValueBinding l -> ValueBinding l -> Bool # (/=) :: ValueBinding l -> ValueBinding l -> Bool # | |
Data l => Data (ValueBinding l) Source # | |
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 # | |
Defined in Language.Haskell.Binder Methods showsPrec :: Int -> ValueBinding l -> ShowS # show :: ValueBinding l -> String # showList :: [ValueBinding l] -> ShowS # |
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 # | |
(Ord k, Data k, Data v) => Data (UnionWith (Map k) v) Source # | |
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 # | |