| 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.
MergeableMergeable1Mergeable2Mergeable3EvalSymEvalSym1EvalSym2ExtractSymExtractSym1ExtractSym2SubstSymSubstSym1SubstSym2NFDataNFData1NFData2Hashable(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)ShowShow1Show2PPrintPPrint1PPrint2AllSymsAllSyms1AllSyms2EqEq1Eq2Ord(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)SymOrdSymOrd1SymOrd2SymEqSymEq1SymEq2UnifiedSymEqUnifiedSymEq1UnifiedSymEq2UnifiedSymOrdUnifiedSymOrd1UnifiedSymOrd2ToSymToSym1ToSym2ToConToCon1ToCon2SerialSerial1Serial2SimpleMergeableSimpleMergeable1SimpleMergeable2BinarySerialize
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: