HORIZON HASKELLDocslts/ghc-10.0.xaa25b892026-10-10Search names, modules, packages, or :: a typeCtrl K

GHC 10.0.0.20260917 · lts/ghc-10.0.x · aa25b89 · 2026-10-10

Moduleghc-10.0.0.20260917GHC2024

GHC.Hs.Decls.Overlap

Data-types describing the overlap annotations for instances as well as interpreting the instances usage within the Safe Haskell context.

  • 2 types
  • 4 values

OverlapFlag

0 declarations

Data-type

datadata OverlapFlag
#

The semantics allowed for overlapping instances for a particular instance. See Note [Safe Haskell isSafeOverlap] in GHC.Core.InstEnv for a explanation of the isSafeOverlap field.

Instances4Eq, NFData, Outputable, Binary

OverlapMode

0 declarations

Data-type

datadata OverlapMode pass
#

The status of overlapping instances (including no overlap) for a type.

Constructors

  • NoOverlap (XOverlapMode pass)

    This instance must not overlap another NoOverlap instance. However, it may be overlapped by Overlapping instances, and it may overlap Overlappable instances.

  • Overlappable (XOverlapMode pass)

    Silently ignore this instance if you find a more specific one that matches the constraint you are trying to resolve

    Example: constraint (Foo [Int]) instance Foo [Int] instance {-# OVERLAPPABLE #-} Foo [a]

    Since the second instance has the Overlappable flag, the first instance will be chosen (otherwise its ambiguous which to choose)

  • Overlapping (XOverlapMode pass)

    Silently ignore any more general instances that may be used to solve the constraint.

    Example: constraint (Foo [Int]) instance {-# OVERLAPPING #-} Foo [Int] instance Foo [a]

    Since the first instance has the Overlapping flag, the second---more general---instance will be ignored (otherwise it is ambiguous which to choose)

  • Overlaps (XOverlapMode pass)

    Equivalent to having both Overlapping and Overlappable flags.

  • Incoherent (XOverlapMode pass)

    Behave like Overlappable and Overlapping, and in addition pick an arbitrary one if there are multiple matching candidates, and don't worry about later instantiation

    Example: constraint (Foo [b]) instance {-# INCOHERENT -} Foo [Int] instance Foo [a] Without the Incoherent flag, we'd complain that instantiating b would change which instance was chosen. See also Note [Incoherent instances] in GHC.Core.InstEnv

  • NonCanonical (XOverlapMode pass)

    Behave like Incoherent, but the instance choice is observable by the program behaviour. See Note [Coherence and specialisation: overview].

    We don't have surface syntax for the distinction between Incoherent and NonCanonical instances; instead, the flag `-f{no-}specialise-incoherents` (on by default) controls whether INCOHERENT instances are regarded as Incoherent or NonCanonical.

  • XOverlapMode !(XXOverlapMode pass)

    The Trees That Grow extension point constructor.

Instances10Eq, Data, NFData, Outputable, Binary, ToHie, …

Queries

Orphan instances

2 instances