ghc-7.4.2: The GHC API

Safe Haskell | None

InstEnv

Synopsis

- type DFunId = Id
- data OverlapFlag
  - = NoOverlap {
    - isSafeOverlap :: Bool
    }
  - | OverlapOk {
    - isSafeOverlap :: Bool
    }
  - | Incoherent {
    - isSafeOverlap :: Bool
    }
- data Instance = Instance {
  - is_cls :: Name
  - is_tcs :: [Maybe Name]
  - is_tvs :: TyVarSet
  - is_tys :: [Type]
  - is_dfun :: DFunId
  - is_flag :: OverlapFlag
  }
- pprInstance :: Instance -> SDoc
- pprInstanceHdr :: Instance -> SDoc
- pprInstances :: [Instance] -> SDoc
- instanceHead :: Instance -> ([TyVar], ThetaType, Class, [Type])
- mkLocalInstance :: DFunId -> OverlapFlag -> Instance
- mkImportedInstance :: Name -> [Maybe Name] -> DFunId -> OverlapFlag -> Instance
- instanceDFunId :: Instance -> DFunId
- setInstanceDFunId :: Instance -> DFunId -> Instance
- instanceRoughTcs :: Instance -> [Maybe Name]
- type InstEnv = UniqFM ClsInstEnv
- emptyInstEnv :: InstEnv
- extendInstEnv :: InstEnv -> Instance -> InstEnv
- overwriteInstEnv :: InstEnv -> Instance -> InstEnv
- extendInstEnvList :: InstEnv -> [Instance] -> InstEnv
- lookupUniqueInstEnv :: (InstEnv, InstEnv) -> Class -> [Type] -> Either Message (Instance, [Type])
- lookupInstEnv' :: InstEnv -> Class -> [Type] -> ([InstMatch], [Instance])
- lookupInstEnv :: (InstEnv, InstEnv) -> Class -> [Type] -> ([InstMatch], [Instance], Bool)
- instEnvElts :: InstEnv -> [Instance]
- classInstances :: (InstEnv, InstEnv) -> Class -> [Instance]
- instanceBindFun :: TyVar -> BindFlag
- instanceCantMatch :: [Maybe Name] -> [Maybe Name] -> Bool
- roughMatchTcs :: [Type] -> [Maybe Name]

# Documentation

type DFunId = Id

data OverlapFlag

Constructors

NoOverlap | This instance must not overlap another

Fields

isSafeOverlap :: Bool

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

isSafeOverlap :: Bool

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 `b` would change which instance was chosen

Fields

isSafeOverlap :: Bool

Instances

Eq OverlapFlag |
Data OverlapFlag |
Typeable OverlapFlag |
Outputable OverlapFlag |
Binary OverlapFlag |

data Instance

Constructors

Instance |

Fields

is_cls :: Name
is_tcs :: [Maybe Name]
is_tvs :: TyVarSet
is_tys :: [Type]
is_dfun :: DFunId
is_flag :: OverlapFlag

Instances

Data Instance |
Typeable Instance |
Outputable Instance |
NamedThing Instance |

pprInstance :: Instance -> SDoc

pprInstanceHdr :: Instance -> SDoc

pprInstances :: [Instance] -> SDoc

instanceHead :: Instance -> ([TyVar], ThetaType, Class, [Type])

mkLocalInstance :: DFunId -> OverlapFlag -> Instance

mkImportedInstance :: Name -> [Maybe Name] -> DFunId -> OverlapFlag -> Instance

instanceDFunId :: Instance -> DFunId

setInstanceDFunId :: Instance -> DFunId -> Instance

instanceRoughTcs :: Instance -> [Maybe Name]

type InstEnv = UniqFM ClsInstEnv

emptyInstEnv :: InstEnv

extendInstEnv :: InstEnv -> Instance -> InstEnv

overwriteInstEnv :: InstEnv -> Instance -> InstEnv

extendInstEnvList :: InstEnv -> [Instance] -> InstEnv

lookupUniqueInstEnv :: (InstEnv, InstEnv) -> Class -> [Type] -> Either Message (Instance, [Type])

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 -> Class -> [Type] -> ([InstMatch], [Instance])

lookupInstEnv :: (InstEnv, InstEnv) -> Class -> [Type] -> ([InstMatch], [Instance], Bool)

instEnvElts :: InstEnv -> [Instance]

classInstances :: (InstEnv, InstEnv) -> Class -> [Instance]

instanceBindFun :: TyVar -> BindFlag

instanceCantMatch :: [Maybe Name] -> [Maybe Name] -> Bool

roughMatchTcs :: [Type] -> [Maybe Name]