ghc-7.8.4: The GHC API

Safe Haskell | None
Language | Haskell98

InstEnv

Synopsis

- type DFunId = Id
- data OverlapFlag
  - = NoOverlap {
    - isSafeOverlap :: Bool
    }
  - | OverlapOk {
    - isSafeOverlap :: Bool
    }
  - | Incoherent {
    - isSafeOverlap :: Bool
    }
- type InstMatch = (ClsInst, [DFunInstType])
- type ClsInstLookupResult = ([InstMatch], [ClsInst], Bool)
- data ClsInst = ClsInst {
  - is_cls_nm :: Name
  - is_tcs :: [Maybe Name]
  - is_tvs :: [TyVar]
  - is_cls :: Class
  - is_tys :: [Type]
  - is_dfun :: DFunId
  - is_flag :: OverlapFlag
  }
- 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

type DFunId = Id

data OverlapFlag

The semantics allowed for overlapping instances for a particular instance. See Note [Safe Haskell isSafeOverlap] (in `lhs`) for a explanation of the `isSafeOverlap` field.

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

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 `b` would change which instance was chosen. See also note [Incoherent instances]

Fields

isSafeOverlap :: Bool

Instances

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

type InstMatch = (ClsInst, [DFunInstType])

type ClsInstLookupResult = ([InstMatch], [ClsInst], Bool)

data ClsInst

Constructors

ClsInst |

Fields

is_cls_nm :: Name
is_tcs :: [Maybe Name]
is_tvs :: [TyVar]
is_cls :: Class
is_tys :: [Type]
is_dfun :: DFunId
is_flag :: OverlapFlag

Instances

Data ClsInst |
Outputable ClsInst |
NamedThing ClsInst |
Typeable * 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])

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], [ClsInst])

lookupInstEnv :: (InstEnv, InstEnv) -> Class -> [Type] -> ClsInstLookupResult

instEnvElts :: InstEnv -> [ClsInst]

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

orphNamesOfClsInst :: ClsInst -> NameSet

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

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

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