-- | -- -- @staged-gg@ is a staged version of "GHC.Generics". -- The abstraction overhead of "GHC.Generics" is removed. -- -- See https://www.andres-loeh.de/StagedSOP/ paper for description of -- @staged-sop@, which is staged version of @generics-sop@. -- The non @generics-sop@ specific parts -- like sections on Typed Template Haskell, and Type Template Haskell and Constraints, -- are applicable to @staged-gg@ as well. -- -- == Examples -- -- See https://github.com/phadej/staged-gg/tree/master/staged-gg-examples -- for examples -- -- == Differences from "GHC.Generics" -- -- * @staged-gg@ is staged: we have 'Code' in the leaves of used representation. -- -- * Representation 'Rep' class is additionally parametrised by a type-constructor @q@, -- which in @staged-gg@ is instantiated to @Code q@. -- -- * There is no @Rec1@ analogue, we use 'K2', which doesn't have an extra index. -- -- * There is no @:.:@ and @Rec1@. Instead we use left associative applications of ':@@:' headed with 'Par2'. -- These changes are discussed in GHC issues -- [https://gitlab.haskell.org/ghc/ghc/-/issues/15969](#15969) and -- [https://gitlab.haskell.org/ghc/ghc/-/issues/7492](#7492). -- -- How 'GHC.Generics.Rep' is different is also described by 'Translate' type family. -- module Staged.GHC.Generics ( -- * Generic representation types V2, U2 (..), M2 (..), K2 (..), Par2 (..), (:++:) (..), (:**:) (..), (:@@:) (..), -- * Synonyms for convenience D2, C2, S2, D, C, S, -- * Meta-information Datatype (..), Constructor (..), Selector (..), Fixity (..), FixityI (..), Associativity (..), SourceUnpackedness (..), SourceStrictness (..), DecidedStrictness (..), Meta (..), -- * Generic type classes Generic (..), Generic1 (..), -- * TH Types Code, Quote, -- * Utilities Translate, -- * TH deriving machinery deriveGeneric, deriveGeneric1, ) where import Staged.GHC.Generics.Instances () import Staged.GHC.Generics.TH import Staged.GHC.Generics.Types