Safe Haskell | None |
---|---|
Language | Haskell98 |
- type DFunId = Id
- data OverlapFlag
- = NoOverlap { }
- | OverlapOk { }
- | Incoherent { }
- type InstMatch = (ClsInst, [DFunInstType])
- type ClsInstLookupResult = ([InstMatch], [ClsInst], Bool)
- data ClsInst = ClsInst {}
- type DFunInstType = Maybe Type
- pprInstance :: ClsInst -> SDoc
- pprInstanceHdr :: ClsInst -> SDoc
- pprInstances :: [ClsInst] -> SDoc
- instanceHead :: ClsInst -> ([TyVar], Class, [Type])
- instanceSig :: ClsInst -> ([TyVar], [Type], Class, [Type])
- mkLocalInstance :: DFunId -> OverlapFlag -> [TyVar] -> Class -> [Type] -> ClsInst
- mkImportedInstance :: Name -> [Maybe Name] -> DFunId -> OverlapFlag -> ClsInst
- instanceDFunId :: ClsInst -> DFunId
- tidyClsInstDFun :: (DFunId -> DFunId) -> ClsInst -> ClsInst
- instanceRoughTcs :: ClsInst -> [Maybe Name]
- type InstEnv = UniqFM ClsInstEnv
- emptyInstEnv :: InstEnv
- extendInstEnv :: InstEnv -> ClsInst -> InstEnv
- overwriteInstEnv :: InstEnv -> ClsInst -> InstEnv
- extendInstEnvList :: InstEnv -> [ClsInst] -> InstEnv
- lookupUniqueInstEnv :: (InstEnv, InstEnv) -> Class -> [Type] -> Either MsgDoc (ClsInst, [Type])
- lookupInstEnv' :: InstEnv -> Class -> [Type] -> ([InstMatch], [ClsInst])
- lookupInstEnv :: (InstEnv, InstEnv) -> Class -> [Type] -> ClsInstLookupResult
- instEnvElts :: InstEnv -> [ClsInst]
- classInstances :: (InstEnv, InstEnv) -> Class -> [ClsInst]
- orphNamesOfClsInst :: ClsInst -> NameSet
- instanceBindFun :: TyVar -> BindFlag
- instanceCantMatch :: [Maybe Name] -> [Maybe Name] -> Bool
- roughMatchTcs :: [Type] -> [Maybe Name]
Documentation
data OverlapFlag Source
The semantics allowed for overlapping instances for a particular
instance. See Note [Safe Haskell isSafeOverlap] (in lhs
) for a
explanation of the isSafeOverlap
field.
NoOverlap | This instance must not overlap another |
OverlapOk | Silently ignore this instance if you find a more specific one that matches the constraint you are trying to resolve Example: constraint (Foo [Int]) instances (Foo [Int]) (Foo [a]) OverlapOk Since the second instance has the OverlapOk flag, the first instance will be chosen (otherwise its ambiguous which to choose) |
Incoherent | Silently ignore this instance if you find any other that matches the constraing you are trying to resolve, including when checking if there are instances that do not match, but unify. Example: constraint (Foo [b])
instances (Foo [Int]) Incoherent
(Foo [a])
Without the Incoherent flag, we'd complain that
instantiating |
type InstMatch = (ClsInst, [DFunInstType]) Source
type ClsInstLookupResult = ([InstMatch], [ClsInst], Bool) Source
type DFunInstType = Maybe Type Source
pprInstance :: ClsInst -> SDoc Source
pprInstanceHdr :: ClsInst -> SDoc Source
pprInstances :: [ClsInst] -> SDoc Source
mkLocalInstance :: DFunId -> OverlapFlag -> [TyVar] -> Class -> [Type] -> ClsInst Source
mkImportedInstance :: Name -> [Maybe Name] -> DFunId -> OverlapFlag -> ClsInst Source
instanceDFunId :: ClsInst -> DFunId Source
instanceRoughTcs :: ClsInst -> [Maybe Name] Source
extendInstEnv :: InstEnv -> ClsInst -> InstEnv Source
overwriteInstEnv :: InstEnv -> ClsInst -> InstEnv Source
extendInstEnvList :: InstEnv -> [ClsInst] -> InstEnv Source
lookupUniqueInstEnv :: (InstEnv, InstEnv) -> Class -> [Type] -> Either MsgDoc (ClsInst, [Type]) Source
Look up an instance in the given instance environment. The given class application must match exactly one instance and the match may not contain any flexi type variables. If the lookup is unsuccessful, yield 'Left errorMessage'.
lookupInstEnv :: (InstEnv, InstEnv) -> Class -> [Type] -> ClsInstLookupResult Source
instEnvElts :: InstEnv -> [ClsInst] Source
orphNamesOfClsInst :: ClsInst -> NameSet Source
Collects the names of concrete types and type constructors that make up the head of a class instance. For instance, given `class Foo a b`:
`instance Foo (Either (Maybe Int) a) Bool` would yield [Either, Maybe, Int, Bool]
Used in the implementation of ":info" in GHCi.
instanceBindFun :: TyVar -> BindFlag Source
roughMatchTcs :: [Type] -> [Maybe Name] Source