Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Language.Haskell.Names
Synopsis
- resolve :: (Data l, Eq l) => [Module l] -> Environment -> Environment
- annotate :: (Data l, Eq l, SrcInfo l) => Environment -> Module l -> Module (Scoped l)
- type Environment = Map (ModuleName ()) [Symbol]
- data Symbol
- = Value {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- | Method {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- className :: Name ()
- | Selector {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- typeName :: Name ()
- constructors :: [Name ()]
- | Constructor {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- typeName :: Name ()
- | Type {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- | Data {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- | NewType {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- | TypeFam {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- associate :: Maybe (Name ())
- | DataFam {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- associate :: Maybe (Name ())
- | Class {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- | PatternConstructor {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- patternTypeName :: Maybe (Name ())
- | PatternSelector {
- symbolModule :: ModuleName ()
- symbolName :: Name ()
- patternTypeName :: Maybe (Name ())
- patternConstructorName :: Name ()
- = Value {
- data Scoped l = Scoped (NameInfo l) l
- data NameInfo l
- = GlobalSymbol Symbol (QName ())
- | LocalValue SrcLoc
- | TypeVar SrcLoc
- | ValueBinder
- | TypeBinder
- | Import (Map (QName ()) [Symbol])
- | ImportPart [Symbol]
- | Export [Symbol]
- | RecPatWildcard [Symbol]
- | RecExpWildcard [(Symbol, NameInfo l)]
- | None
- | ScopeError (Error l)
- data Error l
- = ENotInScope (QName l)
- | EAmbiguous (QName l) [Symbol]
- | ETypeAsClass (QName l)
- | EClassAsType (QName l)
- | ENotExported (Maybe (Name l)) (Name l) (ModuleName l)
- | EModNotFound (ModuleName l)
- | EInternal String
- readSymbols :: FilePath -> IO [Symbol]
- writeSymbols :: FilePath -> [Symbol] -> IO ()
- loadBase :: IO Environment
- ppError :: SrcInfo l => Error l -> String
- ppSymbol :: Symbol -> String
Functions
resolve :: (Data l, Eq l) => [Module l] -> Environment -> Environment Source #
Takes a list of modules and an environment and updates the environment with each of the given modules' exported symbols. The modules can appear in any order and can be mutually recursive.
annotate :: (Data l, Eq l, SrcInfo l) => Environment -> Module l -> Module (Scoped l) Source #
Annotate a module with scoping information using the given environment. All imports of the given module should be in the environment.
Types
type Environment = Map (ModuleName ()) [Symbol] Source #
A map from module name to list of symbols it exports.
Information about an entity. Carries at least the module it was originally declared in and its name.
Constructors
Instances
FromJSON Symbol Source # | |
Defined in Language.Haskell.Names.Environment | |
ToJSON Symbol Source # | |
Data Symbol Source # | |
Defined in Language.Haskell.Names.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Symbol -> c Symbol # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Symbol # toConstr :: Symbol -> Constr # dataTypeOf :: Symbol -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Symbol) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Symbol) # gmapT :: (forall b. Data b => b -> b) -> Symbol -> Symbol # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Symbol -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Symbol -> r # gmapQ :: (forall d. Data d => d -> u) -> Symbol -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Symbol -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Symbol -> m Symbol # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Symbol -> m Symbol # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Symbol -> m Symbol # | |
Show Symbol Source # | |
Eq Symbol Source # | |
Ord Symbol Source # | |
A pair of the name information and original annotation. Used as an annotation type for AST.
Instances
Foldable Scoped Source # | |
Defined in Language.Haskell.Names.Types Methods fold :: Monoid m => Scoped m -> m # foldMap :: Monoid m => (a -> m) -> Scoped a -> m # foldMap' :: Monoid m => (a -> m) -> Scoped a -> m # foldr :: (a -> b -> b) -> b -> Scoped a -> b # foldr' :: (a -> b -> b) -> b -> Scoped a -> b # foldl :: (b -> a -> b) -> b -> Scoped a -> b # foldl' :: (b -> a -> b) -> b -> Scoped a -> b # foldr1 :: (a -> a -> a) -> Scoped a -> a # foldl1 :: (a -> a -> a) -> Scoped a -> a # elem :: Eq a => a -> Scoped a -> Bool # maximum :: Ord a => Scoped a -> a # minimum :: Ord a => Scoped a -> a # | |
Traversable Scoped Source # | |
Functor Scoped Source # | |
Data l => Data (Scoped l) Source # | |
Defined in Language.Haskell.Names.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Scoped l -> c (Scoped l) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Scoped l) # toConstr :: Scoped l -> Constr # dataTypeOf :: Scoped l -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Scoped l)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Scoped l)) # gmapT :: (forall b. Data b => b -> b) -> Scoped l -> Scoped l # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Scoped l -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Scoped l -> r # gmapQ :: (forall d. Data d => d -> u) -> Scoped l -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Scoped l -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Scoped l -> m (Scoped l) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Scoped l -> m (Scoped l) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Scoped l -> m (Scoped l) # | |
Show l => Show (Scoped l) Source # | |
Eq l => Eq (Scoped l) Source # | |
Ord l => Ord (Scoped l) Source # | |
Defined in Language.Haskell.Names.Types | |
Typeable a => Resolvable (Scoped a) Source # | |
Defined in Language.Haskell.Names.Open.Instances | |
SrcInfo l => SrcInfo (Scoped l) Source # | |
Information about the names used in an AST.
Constructors
GlobalSymbol Symbol (QName ()) | global entitiy and the way it is referenced |
LocalValue SrcLoc | local value, and location where it is bound |
TypeVar SrcLoc | type variable, and location where it is bound |
ValueBinder | here the value name is bound |
TypeBinder | here the type name is defined |
Import (Map (QName ()) [Symbol]) |
|
ImportPart [Symbol] | part of an |
Export [Symbol] | part of an |
RecPatWildcard [Symbol] | wildcard in a record pattern. The list contains resolved names of the fields that are brought in scope by this pattern. |
RecExpWildcard [(Symbol, NameInfo l)] | wildcard in a record construction expression. The list contains resolved names of the fields and information about values assigned to those fields. |
None | no annotation |
ScopeError (Error l) | scope error |
Instances
Foldable NameInfo Source # | |
Defined in Language.Haskell.Names.Types Methods fold :: Monoid m => NameInfo m -> m # foldMap :: Monoid m => (a -> m) -> NameInfo a -> m # foldMap' :: Monoid m => (a -> m) -> NameInfo a -> m # foldr :: (a -> b -> b) -> b -> NameInfo a -> b # foldr' :: (a -> b -> b) -> b -> NameInfo a -> b # foldl :: (b -> a -> b) -> b -> NameInfo a -> b # foldl' :: (b -> a -> b) -> b -> NameInfo a -> b # foldr1 :: (a -> a -> a) -> NameInfo a -> a # foldl1 :: (a -> a -> a) -> NameInfo a -> a # elem :: Eq a => a -> NameInfo a -> Bool # maximum :: Ord a => NameInfo a -> a # minimum :: Ord a => NameInfo a -> a # | |
Traversable NameInfo Source # | |
Defined in Language.Haskell.Names.Types | |
Functor NameInfo Source # | |
Data l => Data (NameInfo l) Source # | |
Defined in Language.Haskell.Names.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NameInfo l -> c (NameInfo l) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (NameInfo l) # toConstr :: NameInfo l -> Constr # dataTypeOf :: NameInfo l -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (NameInfo l)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (NameInfo l)) # gmapT :: (forall b. Data b => b -> b) -> NameInfo l -> NameInfo l # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NameInfo l -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NameInfo l -> r # gmapQ :: (forall d. Data d => d -> u) -> NameInfo l -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> NameInfo l -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> NameInfo l -> m (NameInfo l) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NameInfo l -> m (NameInfo l) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NameInfo l -> m (NameInfo l) # | |
Show l => Show (NameInfo l) Source # | |
Eq l => Eq (NameInfo l) Source # | |
Ord l => Ord (NameInfo l) Source # | |
Defined in Language.Haskell.Names.Types |
Errors during name resolution.
Constructors
ENotInScope (QName l) | name is not in scope |
EAmbiguous (QName l) [Symbol] | name is ambiguous |
ETypeAsClass (QName l) | type is used where a type class is expected |
EClassAsType (QName l) | type class is used where a type is expected |
ENotExported (Maybe (Name l)) (Name l) (ModuleName l) | Attempt to explicitly import a name which is not exported (or, possibly, does not even exist). For example: import Prelude(Bool(Right)) The fields are:
|
EModNotFound (ModuleName l) | module not found |
EInternal String | internal error |
Instances
Foldable Error Source # | |
Defined in Language.Haskell.Names.Types Methods fold :: Monoid m => Error m -> m # foldMap :: Monoid m => (a -> m) -> Error a -> m # foldMap' :: Monoid m => (a -> m) -> Error a -> m # foldr :: (a -> b -> b) -> b -> Error a -> b # foldr' :: (a -> b -> b) -> b -> Error a -> b # foldl :: (b -> a -> b) -> b -> Error a -> b # foldl' :: (b -> a -> b) -> b -> Error a -> b # foldr1 :: (a -> a -> a) -> Error a -> a # foldl1 :: (a -> a -> a) -> Error a -> a # elem :: Eq a => a -> Error a -> Bool # maximum :: Ord a => Error a -> a # minimum :: Ord a => Error a -> a # | |
Traversable Error Source # | |
Functor Error Source # | |
Data l => Data (Error l) Source # | |
Defined in Language.Haskell.Names.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Error l -> c (Error l) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Error l) # toConstr :: Error l -> Constr # dataTypeOf :: Error l -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Error l)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Error l)) # gmapT :: (forall b. Data b => b -> b) -> Error l -> Error l # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Error l -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Error l -> r # gmapQ :: (forall d. Data d => d -> u) -> Error l -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Error l -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Error l -> m (Error l) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Error l -> m (Error l) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Error l -> m (Error l) # | |
Show l => Show (Error l) Source # | |
Eq l => Eq (Error l) Source # | |
Ord l => Ord (Error l) Source # | |
Defined in Language.Haskell.Names.Types |
Reading and writing environments
loadBase :: IO Environment Source #
Load a basic environment that contains modules very similar to GHC's base package.