HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Modulegenerics-sop-0.5.1.4Haskell2010

Generics.SOP.Universe

Codes and interpretations

  • 7 types
  • 2 classes
  • 8 values
typetype Rep a = SOP I (Code a)
#

The (generic) representation of a datatype.

A datatype is isomorphic to the sum-of-products of its code. The isomorphism is witnessed by from and to from the Generic class.

classclass All SListI (Code a) => Generic a where
#

The class of representable datatypes.

The SOP approach to generic programming is based on viewing datatypes as a representation (Rep) built from the sum of products of its components. The components of a datatype are specified using the Code type family.

The isomorphism between the original Haskell datatype and its representation is witnessed by the methods of this class, from and to. So for instances of this class, the following laws should (in general) hold:

to . from === id :: a -> a
from . to === id :: Rep a -> Rep a

You typically don't define instances of this class by hand, but rather derive the class instance automatically.

Option 1: Derive via the built-in GHC-generics. For this, you need to use the DeriveGeneric extension to first derive an instance of the Generic class from module GHC.Generics. With this, you can then give an empty instance for Generic, and the default definitions will just work. The pattern looks as follows:

import qualified GHC.Generics as GHC
import Generics.SOP

...

data T = ... deriving (GHC.Generic, ...)

instance Generic T -- empty
instance HasDatatypeInfo T -- empty, if you want/need metadata

Option 2: Derive via Template Haskell. For this, you need to enable the TemplateHaskell extension. You can then use deriveGeneric from module Generics.SOP.TH to have the instance generated for you. The pattern looks as follows:

import Generics.SOP
import Generics.SOP.TH

...

data T = ...

deriveGeneric ''T -- derives HasDatatypeInfo as well

Tradeoffs: Whether to use Option 1 or 2 is mainly a matter of personal taste. The version based on Template Haskell probably has less run-time overhead.

Non-standard instances: It is possible to give Generic instances manually that deviate from the standard scheme, as long as at least

to . from === id :: a -> a

still holds.

Associated types

  • type family Code a :: [[Type]]

    The code of a datatype.

    This is a list of lists of its components. The outer list contains one element per constructor. The inner list contains one element per constructor argument (field).

    Example: The datatype

    data Tree = Leaf Int | Node Tree Tree

    is supposed to have the following code:

    type instance Code (Tree a) =
      '[ '[ Int ]
       , '[ Tree, Tree ]
       ]

Methods

  • from :: a -> Rep a

    Converts from a value to its structural representation.

  • to :: Rep a -> a

    Converts from a structural representation back to the original value.

Instances193Generic, …
  • Generic E0Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic E1Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic E12Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic E2Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic E3Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic E6Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic E9Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic FieldFormatDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic FormatAdjustmentDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic FormatParseDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic FormatSignDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic VoidDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ByteOrderDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic BlockReasonDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ThreadStatusDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic NestedAtomicallyDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic NoMethodErrorDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic NonTerminationDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic PatternMatchFailDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic RecConErrorDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic RecSelErrorDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic RecUpdErrorDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic TypeErrorDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ConstrRepDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic DataRepDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic FixityDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic AllDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic AnyDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic VersionDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ErrorCallDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ArithExceptionDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic LocationDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic SrcLocDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic FingerprintDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic FFFormatDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ErrnoDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CCharDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CClockDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CDoubleDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CFloatDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CIntDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CIntMaxDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CIntPtrDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CLLongDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CLongDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CPtrdiffDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CSCharDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CSUSecondsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CShortDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CSigAtomicDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CSizeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CTimeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CUCharDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CUIntDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CUIntMaxDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CUIntPtrDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CULLongDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CULongDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CUSecondsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CUShortDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CWcharDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic AssociativityDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic DDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic DecidedStrictnessDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic FixityDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic RDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic SDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic SourceStrictnessDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic SourceUnpackednessDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic MaskingStateDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic BufferStateDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic IODeviceTypeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic SeekModeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CodingFailureModeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CodingProgressDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic AllocationLimitExceededDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ArrayExceptionDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic AssertionFailedDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic AsyncExceptionDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic BlockedIndefinitelyOnMVarDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic BlockedIndefinitelyOnSTMDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic DeadlockDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ExitCodeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic FixIOExceptionDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic IOErrorTypeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic IOExceptionDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic HandlePosnDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic LockModeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic BufferModeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic NewlineDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic NewlineModeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic IOModeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CCFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ConcFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic DebugFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic DoCostCentresDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic DoHeapProfileDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic DoTraceDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic GCFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic GiveGCStatsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic MiscFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ParFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ProfFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic RTSFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic TickyFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic TraceFlagsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic CallStackDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic SrcLocDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic StaticPtrInfoDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic GCDetailsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic RTSStatsDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic LexemeDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic NumberDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic GeneralCategoryDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic BoolDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic OrderingDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic RuntimeRepDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic VecCountDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic VecElemDefined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ()Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Complex a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (First a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Last a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Max a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Min a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (WrappedMonoid m)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (ArgDescr a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (ArgOrder a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (OptDescr a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (NonEmpty a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Identity a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (First a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Last a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Down a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Dual a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Endo a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Product a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Sum a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Par1 p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Buffer e)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Maybe a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (I a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic [a]Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Fixed a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Arg a b)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Either a b)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Proxy t)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (U1 p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (V1 p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Const a b)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Alt f a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (BufferCodec from to state)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (K a b)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Product f g a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Sum f g a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (K1 i c p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ((:*:) f g p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ((:+:) f g p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ((-.->) f g a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (Compose f g a)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (M1 i c f p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ((:.:) f g p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic ((:.:) f g p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27, t28)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
  • Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27, t28, t29)Defined in generics-sop-0.5.1.4 · Generics.SOP.Instances · orphan
classclass Generic a => HasDatatypeInfo a where
#

A class of datatypes that have associated metadata.

It is possible to use the sum-of-products approach to generic programming without metadata. If you need metadata in a function, an additional constraint on this class is in order.

You typically don't define instances of this class by hand, but rather derive the class instance automatically. See the documentation of Generic for the options.

Associated types

Methods

  • datatypeInfo :: proxy a -> DatatypeInfo (Code a)

    Term-level datatype info; by default, the term-level datatype info is produced from the type-level info.

Instances193HasDatatypeInfo, …
typetype IsProductType a (xs :: [Type]) = (Generic a, Code a ~ '[xs])
#

Constraint that captures that a datatype is a product type, i.e., a type with a single constructor.

It also gives access to the code for the arguments of that constructor.

typetype ProductCode a = Head (Code a)
#

Direct access to the part of the code that is relevant for a product type.

typetype IsEnumType a = (Generic a, All ((~) '[]) (Code a))
#

Constraint that captures that a datatype is an enumeration type, i.e., none of the constructors have any arguments.

typetype IsWrappedType a x = (Generic a, Code a ~ '['[x]])
#

Constraint that captures that a datatype is a single-constructor, single-field datatype. This always holds for newtype-defined types, but it can also be true for data-defined types.

The constraint also gives access to the type that is wrapped.

typetype WrappedCode a = Head (Head (Code a))
#

Direct access to the part of the code that is relevant for wrapped types and newtypes.

typetype IsNewtype a x = (IsWrappedType a x, Coercible a x)
#

Constraint that captures that a datatype is a newtype. This makes use of the fact that newtypes are always coercible to the type they wrap, whereas datatypes are not.