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

Language.Haskell.Syntax.Decls.Overlap

Data-type describing the overlap annotations for instances.

  • 1 type
  • 4 values
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, …