Avail

ghc-8.6.3: The GHC API

Safe Haskell | None
Language | Haskell2010

Avail

Synopsis

- type Avails = [AvailInfo]
- data AvailInfo
  - = Avail Name
  - | AvailTC Name [Name] [FieldLabel]
- avail :: Name -> AvailInfo
- availsToNameSet :: [AvailInfo] -> NameSet
- availsToNameSetWithSelectors :: [AvailInfo] -> NameSet
- availsToNameEnv :: [AvailInfo] -> NameEnv AvailInfo
- availName :: AvailInfo -> Name
- availNames :: AvailInfo -> [Name]
- availNonFldNames :: AvailInfo -> [Name]
- availNamesWithSelectors :: AvailInfo -> [Name]
- availFlds :: AvailInfo -> [FieldLabel]
- availsNamesWithOccs :: [AvailInfo] -> [(Name, OccName)]
- availNamesWithOccs :: AvailInfo -> [(Name, OccName)]
- stableAvailCmp :: AvailInfo -> AvailInfo -> Ordering
- plusAvail :: AvailInfo -> AvailInfo -> AvailInfo
- trimAvail :: AvailInfo -> Name -> AvailInfo
- filterAvail :: (Name -> Bool) -> AvailInfo -> [AvailInfo] -> [AvailInfo]
- filterAvails :: (Name -> Bool) -> [AvailInfo] -> [AvailInfo]
- nubAvails :: [AvailInfo] -> [AvailInfo]

# Documentation

type Avails = [AvailInfo] #

A collection of `AvailInfo` - several things that are "available"

data AvailInfo #

Records what things are "available", i.e. in scope

Constructors

Avail Name | An ordinary identifier in scope
AvailTC Name [Name] [FieldLabel] | A type or class in scope. Parameters: 1) The name of the type or class 2) The available pieces of type or class, excluding field selectors. 3) The record fields of the type (see Note [Representing fields in AvailInfo]). The AvailTC Invariant: * If the type or class is itself to be in scope, it must be *first* in this list. Thus, typically: `AvailTC Eq [Eq, ==, /=]`

Instances

Eq AvailInfo # |
Instance details Defined in Avail Methods (==) :: AvailInfo -> AvailInfo -> Bool # (/=) :: AvailInfo -> AvailInfo -> Bool #
Data AvailInfo # |
Instance details Defined in Avail Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> AvailInfo -> c AvailInfo Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c AvailInfo Source # toConstr :: AvailInfo -> Constr Source # dataTypeOf :: AvailInfo -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c AvailInfo) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AvailInfo) Source # gmapT :: (forall b. Data b => b -> b) -> AvailInfo -> AvailInfo Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> AvailInfo -> r Source # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> AvailInfo -> r Source # gmapQ :: (forall d. Data d => d -> u) -> AvailInfo -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> AvailInfo -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> AvailInfo -> m AvailInfo Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> AvailInfo -> m AvailInfo Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> AvailInfo -> m AvailInfo Source #
Outputable AvailInfo # |
Instance details Defined in Avail Methods ppr :: AvailInfo -> SDoc # pprPrec :: Rational -> AvailInfo -> SDoc #
Binary AvailInfo # |
Instance details Defined in Avail Methods put_ :: BinHandle -> AvailInfo -> IO () # put :: BinHandle -> AvailInfo -> IO (Bin AvailInfo) # get :: BinHandle -> IO AvailInfo #

avail :: Name -> AvailInfo #

availsToNameSet :: [AvailInfo] -> NameSet #

availsToNameSetWithSelectors :: [AvailInfo] -> NameSet #

availsToNameEnv :: [AvailInfo] -> NameEnv AvailInfo #

availName :: AvailInfo -> Name #

Just the main name made available, i.e. not the available pieces of type or class brought into scope by the `GenAvailInfo`

availNames :: AvailInfo -> [Name] #

All names made available by the availability information (excluding overloaded selectors)

availNonFldNames :: AvailInfo -> [Name] #

Names for non-fields made available by the availability information

availNamesWithSelectors :: AvailInfo -> [Name] #

All names made available by the availability information (including overloaded selectors)

availFlds :: AvailInfo -> [FieldLabel] #

Fields made available by the availability information

availsNamesWithOccs :: [AvailInfo] -> [(Name, OccName)] #

availNamesWithOccs :: AvailInfo -> [(Name, OccName)] #

`Name`s made available by the availability information, paired with the `OccName` used to refer to each one.

When `DuplicateRecordFields` is in use, the `Name` may be the mangled name of a record selector (e.g. `$sel:foo:MkT`) while the `OccName` will be the label of the field (e.g. `foo`).

See Note [Representing fields in AvailInfo].

stableAvailCmp :: AvailInfo -> AvailInfo -> Ordering #

Compare lexicographically

plusAvail :: AvailInfo -> AvailInfo -> AvailInfo #

trimAvail :: AvailInfo -> Name -> AvailInfo #

trims an `AvailInfo` to keep only a single name

filterAvail :: (Name -> Bool) -> AvailInfo -> [AvailInfo] -> [AvailInfo] #

filters an `AvailInfo` by the given predicate

filterAvails :: (Name -> Bool) -> [AvailInfo] -> [AvailInfo] #

filters `AvailInfo`s by the given predicate

nubAvails :: [AvailInfo] -> [AvailInfo] #

Combines `AvailInfo`s from the same family `avails` may have several items with the same availName E.g import Ix( Ix(..), index ) will give Ix(Ix,index,range) and Ix(index) We want to combine these; addAvail does that