ghc-8.2.2: The GHC API

Safe Haskell | None
Language | Haskell2010

TcEnv

Contents

- Orphan instances

Synopsis

- data TyThing
  - = AnId Id
  - | AConLike ConLike
  - | ATyCon TyCon
  - | ACoAxiom (CoAxiom Branched)
- data TcTyThing
  - = AGlobal TyThing
  - | ATcId {
    - tct_id :: TcId
    - tct_info :: IdBindingInfo
    }
  - | ATyVar Name TcTyVar
  - | ATcTyCon TyCon
  - | APromotionErr PromotionErr
- type TcId = Id
- data InstInfo a = InstInfo {
  - iSpec :: ClsInst
  - iBinds :: InstBindings a
  }
- iDFunId :: InstInfo a -> DFunId
- pprInstInfoDetails :: OutputableBndrId a => InstInfo a -> SDoc
- simpleInstInfoClsTy :: InstInfo a -> (Class, Type)
- simpleInstInfoTy :: InstInfo a -> Type
- simpleInstInfoTyCon :: InstInfo a -> TyCon
- data InstBindings a = InstBindings {
  - ib_tyvars :: [Name]
  - ib_binds :: LHsBinds a
  - ib_pragmas :: [LSig a]
  - ib_extensions :: [Extension]
  - ib_derived :: Bool
  }
- tcExtendGlobalEnv :: [TyThing] -> TcM r -> TcM r
- tcExtendTyConEnv :: [TyCon] -> TcM r -> TcM r
- tcExtendGlobalEnvImplicit :: [TyThing] -> TcM r -> TcM r
- setGlobalTypeEnv :: TcGblEnv -> TypeEnv -> TcM TcGblEnv
- tcExtendGlobalValEnv :: [Id] -> TcM a -> TcM a
- tcLookupLocatedGlobal :: Located Name -> TcM TyThing
- tcLookupGlobal :: Name -> TcM TyThing
- tcLookupTyCon :: Name -> TcM TyCon
- tcLookupClass :: Name -> TcM Class
- tcLookupDataCon :: Name -> TcM DataCon
- tcLookupPatSyn :: Name -> TcM PatSyn
- tcLookupConLike :: Name -> TcM ConLike
- tcLookupLocatedGlobalId :: Located Name -> TcM Id
- tcLookupLocatedTyCon :: Located Name -> TcM TyCon
- tcLookupLocatedClass :: Located Name -> TcM Class
- tcLookupAxiom :: Name -> TcM (CoAxiom Branched)
- lookupGlobal :: HscEnv -> Name -> IO TyThing
- tcExtendKindEnv :: NameEnv TcTyThing -> TcM r -> TcM r
- tcExtendKindEnvList :: [(Name, TcTyThing)] -> TcM r -> TcM r
- tcExtendTyVarEnv :: [TyVar] -> TcM r -> TcM r
- tcExtendTyVarEnv2 :: [(Name, TcTyVar)] -> TcM r -> TcM r
- tcExtendLetEnv :: TopLevelFlag -> TcSigFun -> IsGroupClosed -> [TcId] -> TcM a -> TcM a
- tcExtendSigIds :: TopLevelFlag -> [TcId] -> TcM a -> TcM a
- tcExtendRecIds :: [(Name, TcId)] -> TcM a -> TcM a
- tcExtendIdEnv :: [TcId] -> TcM a -> TcM a
- tcExtendIdEnv1 :: Name -> TcId -> TcM a -> TcM a
- tcExtendIdEnv2 :: [(Name, TcId)] -> TcM a -> TcM a
- tcExtendIdBndrs :: [TcIdBinder] -> TcM a -> TcM a
- tcExtendLocalTypeEnv :: TcLclEnv -> [(Name, TcTyThing)] -> TcM TcLclEnv
- isTypeClosedLetBndr :: Id -> Bool
- tcLookup :: Name -> TcM TcTyThing
- tcLookupLocated :: Located Name -> TcM TcTyThing
- tcLookupLocalIds :: [Name] -> TcM [TcId]
- tcLookupId :: Name -> TcM Id
- tcLookupTyVar :: Name -> TcM TcTyVar
- tcLookupLcl_maybe :: Name -> TcM (Maybe TcTyThing)
- getInLocalScope :: TcM (Name -> Bool)
- wrongThingErr :: String -> TcTyThing -> Name -> TcM a
- pprBinders :: [Name] -> SDoc
- tcAddDataFamConPlaceholders :: [LInstDecl Name] -> TcM a -> TcM a
- tcAddPatSynPlaceholders :: [PatSynBind Name Name] -> TcM a -> TcM a
- getTypeSigNames :: [LSig Name] -> NameSet
- tcExtendRecEnv :: [(Name, TyThing)] -> TcM r -> TcM r
- tcLookupInstance :: Class -> [Type] -> TcM ClsInst
- tcGetInstEnvs :: TcM InstEnvs
- tcExtendRules :: [LRuleDecl Id] -> TcM a -> TcM a
- tcGetDefaultTys :: TcM ([Type], (Bool, Bool))
- tcGetGlobalTyCoVars :: TcM TcTyVarSet
- checkWellStaged :: SDoc -> ThLevel -> ThLevel -> TcM ()
- tcMetaTy :: Name -> TcM Type
- thLevel :: ThStage -> ThLevel
- topIdLvl :: Id -> ThLevel
- isBrackStage :: ThStage -> Bool
- newDFunName :: Class -> [Type] -> SrcSpan -> TcM Name
- newDFunName' :: Class -> TyCon -> TcM Name
- newFamInstTyConName :: Located Name -> [Type] -> TcM Name
- newFamInstAxiomName :: Located Name -> [[Type]] -> TcM Name
- mkStableIdFromString :: String -> Type -> SrcSpan -> (OccName -> OccName) -> TcM TcId
- mkStableIdFromName :: Name -> Type -> SrcSpan -> (OccName -> OccName) -> TcM TcId
- mkWrapperName :: (MonadIO m, HasDynFlags m, HasModule m) => String -> String -> m FastString

# Documentation

data TyThing #

A global typecheckable-thing, essentially anything that has a name. Not to be confused with a `TcTyThing`, which is also a typecheckable thing but in the *local* context. See `TcEnv` for how to retrieve a `TyThing` given a `Name`.

Constructors

AnId Id |
AConLike ConLike |
ATyCon TyCon |
ACoAxiom (CoAxiom Branched) |

Instances

Outputable TyThing # |
Methods ppr :: TyThing -> SDoc # pprPrec :: Rational -> TyThing -> SDoc #
NamedThing TyThing # |
Methods getOccName :: TyThing -> OccName # getName :: TyThing -> Name #

data TcTyThing #

A typecheckable thing available in a local context. Could be `AGlobal` `TyThing`, but also lexically scoped variables, etc. See `TcEnv` for how to retrieve a `TyThing` given a `Name`.

Constructors

AGlobal TyThing |
ATcId |

Fields

- tct_id :: TcId
- tct_info :: IdBindingInfo

ATyVar Name TcTyVar |
ATcTyCon TyCon |
APromotionErr PromotionErr |

Instances

Outputable TcTyThing # |
Methods ppr :: TcTyThing -> SDoc # pprPrec :: Rational -> TcTyThing -> SDoc #

type TcId = Id #

data InstInfo a #

Constructors

InstInfo |

Fields

- iSpec :: ClsInst
- iBinds :: InstBindings a

Instances

OutputableBndrId a => Outputable (InstInfo a) # |
Methods ppr :: InstInfo a -> SDoc # pprPrec :: Rational -> InstInfo a -> SDoc #

iDFunId :: InstInfo a -> DFunId #

pprInstInfoDetails :: OutputableBndrId a => InstInfo a -> SDoc #

simpleInstInfoClsTy :: InstInfo a -> (Class, Type) #

simpleInstInfoTy :: InstInfo a -> Type #

simpleInstInfoTyCon :: InstInfo a -> TyCon #

data InstBindings a #

Constructors

InstBindings |

Fields

- ib_tyvars :: [Name]
- ib_binds :: LHsBinds a
- ib_pragmas :: [LSig a]
- ib_extensions :: [Extension]
- ib_derived :: Bool

tcExtendGlobalEnv :: [TyThing] -> TcM r -> TcM r #

tcExtendTyConEnv :: [TyCon] -> TcM r -> TcM r #

tcExtendGlobalEnvImplicit :: [TyThing] -> TcM r -> TcM r #

setGlobalTypeEnv :: TcGblEnv -> TypeEnv -> TcM TcGblEnv #

tcExtendGlobalValEnv :: [Id] -> TcM a -> TcM a #

tcLookupLocatedGlobal :: Located Name -> TcM TyThing #

tcLookupGlobal :: Name -> TcM TyThing #

tcLookupTyCon :: Name -> TcM TyCon #

tcLookupClass :: Name -> TcM Class #

tcLookupDataCon :: Name -> TcM DataCon #

tcLookupPatSyn :: Name -> TcM PatSyn #

tcLookupConLike :: Name -> TcM ConLike #

tcLookupLocatedGlobalId :: Located Name -> TcM Id #

tcLookupLocatedTyCon :: Located Name -> TcM TyCon #

tcLookupLocatedClass :: Located Name -> TcM Class #

tcLookupAxiom :: Name -> TcM (CoAxiom Branched) #

lookupGlobal :: HscEnv -> Name -> IO TyThing #

tcExtendKindEnv :: NameEnv TcTyThing -> TcM r -> TcM r #

tcExtendKindEnvList :: [(Name, TcTyThing)] -> TcM r -> TcM r #

tcExtendTyVarEnv :: [TyVar] -> TcM r -> TcM r #

tcExtendTyVarEnv2 :: [(Name, TcTyVar)] -> TcM r -> TcM r #

tcExtendLetEnv :: TopLevelFlag -> TcSigFun -> IsGroupClosed -> [TcId] -> TcM a -> TcM a #

tcExtendSigIds :: TopLevelFlag -> [TcId] -> TcM a -> TcM a #

tcExtendRecIds :: [(Name, TcId)] -> TcM a -> TcM a #

tcExtendIdEnv :: [TcId] -> TcM a -> TcM a #

tcExtendIdEnv1 :: Name -> TcId -> TcM a -> TcM a #

tcExtendIdEnv2 :: [(Name, TcId)] -> TcM a -> TcM a #

tcExtendIdBndrs :: [TcIdBinder] -> TcM a -> TcM a #

tcExtendLocalTypeEnv :: TcLclEnv -> [(Name, TcTyThing)] -> TcM TcLclEnv #

isTypeClosedLetBndr :: Id -> Bool #

tcLookup :: Name -> TcM TcTyThing #

tcLookupLocated :: Located Name -> TcM TcTyThing #

tcLookupLocalIds :: [Name] -> TcM [TcId] #

tcLookupId :: Name -> TcM Id #

tcLookupTyVar :: Name -> TcM TcTyVar #

tcLookupLcl_maybe :: Name -> TcM (Maybe TcTyThing) #

getInLocalScope :: TcM (Name -> Bool) #

wrongThingErr :: String -> TcTyThing -> Name -> TcM a #

pprBinders :: [Name] -> SDoc #

tcAddDataFamConPlaceholders :: [LInstDecl Name] -> TcM a -> TcM a #

tcAddPatSynPlaceholders :: [PatSynBind Name Name] -> TcM a -> TcM a #

getTypeSigNames :: [LSig Name] -> NameSet #

tcExtendRecEnv :: [(Name, TyThing)] -> TcM r -> TcM r #

tcLookupInstance :: Class -> [Type] -> TcM ClsInst #

tcGetInstEnvs :: TcM InstEnvs #

tcExtendRules :: [LRuleDecl Id] -> TcM a -> TcM a #

tcGetDefaultTys :: TcM ([Type], (Bool, Bool)) #

tcGetGlobalTyCoVars :: TcM TcTyVarSet #

`tcGetGlobalTyCoVars` returns a fully-zonked set of *scoped* tyvars free in the environment. To improve subsequent calls to the same function it writes the zonked set back into the environment. Note that this returns all variables free in anything (term-level or type-level) in scope. We thus don't have to worry about clashes with things that are not in scope, because if they are reachable, then they'll be returned here.

checkWellStaged :: SDoc -> ThLevel -> ThLevel -> TcM () #

tcMetaTy :: Name -> TcM Type #

thLevel :: ThStage -> ThLevel #

topIdLvl :: Id -> ThLevel #

isBrackStage :: ThStage -> Bool #

newDFunName :: Class -> [Type] -> SrcSpan -> TcM Name #

Make a name for the dict fun for an instance decl. It's an *external* name, like other top-level names, and hence must be made with newGlobalBinder.

newDFunName' :: Class -> TyCon -> TcM Name #

Special case of `newDFunName` to generate dict fun name for a single TyCon.

newFamInstTyConName :: Located Name -> [Type] -> TcM Name #

newFamInstAxiomName :: Located Name -> [[Type]] -> TcM Name #

mkStableIdFromString :: String -> Type -> SrcSpan -> (OccName -> OccName) -> TcM TcId #

mkStableIdFromName :: Name -> Type -> SrcSpan -> (OccName -> OccName) -> TcM TcId #

mkWrapperName :: (MonadIO m, HasDynFlags m, HasModule m) => String -> String -> m FastString #

# Orphan instances

MonadThings (IOEnv (Env TcGblEnv TcLclEnv)) # |
Methods lookupThing :: Name -> IOEnv (Env TcGblEnv TcLclEnv) TyThing # lookupId :: Name -> IOEnv (Env TcGblEnv TcLclEnv) Id # lookupDataCon :: Name -> IOEnv (Env TcGblEnv TcLclEnv) DataCon # lookupTyCon :: Name -> IOEnv (Env TcGblEnv TcLclEnv) TyCon #