ghc-7.8.4: The GHC API

Safe HaskellNone
LanguageHaskell98

InstEnv

Synopsis

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.

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
 

type InstEnv = UniqFM ClsInstEnv 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'.

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.