Copyright | (c) Sirui Lu 2024 |
---|---|
License | BSD-3-Clause (see the LICENSE file) |
Maintainer | siruilu@cs.washington.edu |
Stability | Experimental |
Portability | GHC only |
Safe Haskell | None |
Language | Haskell2010 |
Grisette.Internal.TH.Derivation.Derive
Description
Synopsis
- derive :: [Name] -> [Name] -> Q [Dec]
- deriveWith :: DeriveConfig -> [Name] -> [Name] -> Q [Dec]
- allClasses0 :: [Name]
- allClasses01 :: [Name]
- allClasses012 :: [Name]
- basicClasses0 :: [Name]
- basicClasses1 :: [Name]
- basicClasses2 :: [Name]
- basicClasses01 :: [Name]
- basicClasses012 :: [Name]
- noExistentialClasses0 :: [Name]
- concreteOrdClasses0 :: [Name]
- hashableClasses0 :: [Name]
- noExistentialClasses1 :: [Name]
- concreteOrdClasses1 :: [Name]
- hashableClasses1 :: [Name]
- noExistentialClasses2 :: [Name]
- concreteOrdClasses2 :: [Name]
- hashableClasses2 :: [Name]
- showClasses :: [Name]
- pprintClasses :: [Name]
- evalSymClasses :: [Name]
- extractSymClasses :: [Name]
- substSymClasses :: [Name]
- allSymsClasses :: [Name]
- eqClasses :: [Name]
- ordClasses :: [Name]
- symOrdClasses :: [Name]
- symEqClasses :: [Name]
- unifiedSymOrdClasses :: [Name]
- unifiedSymEqClasses :: [Name]
- mergeableClasses :: [Name]
- nfDataClasses :: [Name]
- hashableClasses :: [Name]
- toSymClasses :: [Name]
- toConClasses :: [Name]
- serialClasses :: [Name]
- simpleMergeableClasses :: [Name]
- unifiedSimpleMergeableClasses :: [Name]
- filterExactNumArgs :: Int -> [Name] -> [Name]
- filterLeqNumArgs :: Int -> [Name] -> [Name]
Documentation
derive :: [Name] -> [Name] -> Q [Dec] Source #
Derive the specified classes for a data type with the given name.
See deriveWith
for more details.
deriveWith :: DeriveConfig -> [Name] -> [Name] -> Q [Dec] Source #
Derive the specified classes for a data type with the given name.
Support the following classes for both vanilla data types and GADTs.
Mergeable
Mergeable1
Mergeable2
Mergeable3
EvalSym
EvalSym1
EvalSym2
ExtractSym
ExtractSym1
ExtractSym2
SubstSym
SubstSym1
SubstSym2
NFData
NFData1
NFData2
Hashable
(will fail to derive if the type contains any symbolic variables)Hashable1
(will fail to derive if the type contains any symbolic variables)Hashable2
(will fail to derive if the type contains any symbolic variables)Show
Show1
Show2
PPrint
PPrint1
PPrint2
AllSyms
AllSyms1
AllSyms2
Eq
Eq1
Eq2
Ord
(will fail to derive if the type contains any symbolic variables)Ord1
(will fail to derive if the type contains any symbolic variables)Ord2
(will fail to derive if the type contains any symbolic variables)SymOrd
SymOrd1
SymOrd2
SymEq
SymEq1
SymEq2
UnifiedSymEq
UnifiedSymEq1
UnifiedSymEq2
UnifiedSymOrd
UnifiedSymOrd1
UnifiedSymOrd2
ToSym
ToSym1
ToSym2
ToCon
ToCon1
ToCon2
Serial
Serial1
Serial2
SimpleMergeable
SimpleMergeable1
SimpleMergeable2
Binary
Serialize
Note that the following type classes cannot be derived for GADTs with existential type variables.
allClasses0 :: [Name] Source #
All the classes that can be derived for GADTs.
This includes:
allClasses01 :: [Name] Source #
All the classes that can be derived for GADT functors.
This includes all the classes in allClasses0
and allClasses1
.
allClasses012 :: [Name] Source #
All the classes that can be derived for GADT functors.
This includes all the classes in allClasses0
, allClasses1
,
and allClasses2
.
basicClasses0 :: [Name] Source #
basicClasses1 :: [Name] Source #
Basic classes for GADT functors.
This includes:
basicClasses2 :: [Name] Source #
Basic classes for GADT functors.
This includes:
basicClasses01 :: [Name] Source #
Basic classes for GADT functors.
This includes all the classes in basicClasses0
and basicClasses1
.
basicClasses012 :: [Name] Source #
Basic classes for GADT functors.
This includes all the classes in basicClasses0
and basicClasses1
and
basicClasses2
.
noExistentialClasses0 :: [Name] Source #
concreteOrdClasses0 :: [Name] Source #
Concrete ordered classes that can be derived for GADTs that
- uses unified evaluation mode, or
- does not contain any symbolic variables.
This includes:
Ord
(will fail to derive if the type contains any symbolic variables)UnifiedSymOrd
hashableClasses0 :: [Name] Source #
Hashable classes that can be derived for GADTs.
This includes:
Hashable
(will fail to derive if the type contains any symbolic variables)
noExistentialClasses1 :: [Name] Source #
concreteOrdClasses1 :: [Name] Source #
*1
concrete ordered classes that can be derived for GADT functors that
- uses unified evaluation mode, or
- does not contain any symbolic variables.
This includes:
Ord1
(will fail to derive if the type contains any symbolic variables)UnifiedSymOrd1
hashableClasses1 :: [Name] Source #
Hashable classes that can be derived for GADT functors.
This includes:
Hashable1
(will fail to derive if the type contains any symbolic variables)
noExistentialClasses2 :: [Name] Source #
concreteOrdClasses2 :: [Name] Source #
*2
concrete ordered classes that can be derived for GADT functors that
- uses unified evaluation mode, or
- does not contain any symbolic variables.
This includes:
Ord2
(will fail to derive if the type contains any symbolic variables)UnifiedSymOrd2
hashableClasses2 :: [Name] Source #
Hashable classes that can be derived for GADT functors.
This includes:
Hashable2
(will fail to derive if the type contains any symbolic variables)
showClasses :: [Name] Source #
pprintClasses :: [Name] Source #
evalSymClasses :: [Name] Source #
extractSymClasses :: [Name] Source #
substSymClasses :: [Name] Source #
allSymsClasses :: [Name] Source #
ordClasses :: [Name] Source #
symOrdClasses :: [Name] Source #
symEqClasses :: [Name] Source #
unifiedSymOrdClasses :: [Name] Source #
UnifiedSymOrd
classes that can be derived for GADTs.
This includes:
unifiedSymEqClasses :: [Name] Source #
UnifiedSymEq
classes that can be derived for GADTs.
This includes:
mergeableClasses :: [Name] Source #
Mergeable
classes that can be derived for GADTs.
This includes:
nfDataClasses :: [Name] Source #
hashableClasses :: [Name] Source #
toSymClasses :: [Name] Source #
toConClasses :: [Name] Source #
serialClasses :: [Name] Source #
simpleMergeableClasses :: [Name] Source #
SimpleMergeable
classes that can be derived for GADTs.
This includes:
unifiedSimpleMergeableClasses :: [Name] Source #
UnifiedSimpleMergeable
classes that can be derived for GADTs.
This includes: