InstEnv
Documentation
data OverlapFlag
Constructors
NoOverlap | This instance must not overlap another |
Fields | |
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) |
Fields | |
Incoherent | Like OverlapOk, but also ignore this instance if it doesn't match the constraint you are trying to resolve, but could match if the type variables in the constraint were instantiated Example: constraint (Foo [b])
instances (Foo [Int]) Incoherent
(Foo [a])
Without the Incoherent flag, we'd complain that
instantiating |
Fields |
Instances
pprInstance :: Instance -> SDoc
pprInstanceHdr :: Instance -> SDoc
pprInstances :: [Instance] -> SDoc
mkLocalInstance :: DFunId -> OverlapFlag -> Instance
mkImportedInstance :: Name -> [Maybe Name] -> DFunId -> OverlapFlag -> Instance
instanceDFunId :: Instance -> DFunId
setInstanceDFunId :: Instance -> DFunId -> Instance
instanceRoughTcs :: Instance -> [Maybe Name]
extendInstEnv :: InstEnv -> Instance -> InstEnv
extendInstEnvList :: InstEnv -> [Instance] -> InstEnv
instEnvElts :: InstEnv -> [Instance]
classInstances :: (InstEnv, InstEnv) -> Class -> [Instance]
instanceBindFun :: TyVar -> BindFlag
roughMatchTcs :: [Type] -> [Maybe Name]