Modulecuddle-1.8.1.0GHC2021
Codec.CBOR.Cuddle.CDDL.Resolve
Module containing tools for resolving CDDL
Resolving the CDDL is a process of simplifying the representation to make further operations, such as CBOR generation or validation, easier. We operate with a number of passes:
First, we deal with any rule extensions and create a single map from identifiers to (potentially parametrised) entities.
Second, we flatten the structure to a CTree, which discards a lot of the extrenuous information.
Then we resolve identifiers. Specifically, we do three things: - Resolve identifiers that map to the postlude. - Differentiate between generic args and references to top-level rules. - Validate that all references exist. Note that we cannot resolve all references since they may be circular.
Finally, we monomorphise, synthesizing instances of rules with their generic arguments bound.
- 3 types
- 6 values
- Packagecuddle-1.8.1.0
- Exports26
- LanguageGHC2021
- LicenceApache-2.0
- SourceResolve.hs
Build a CTree incorporating references.
This translation cannot fail.
Monomorphise the CTree
Concretely, for each reference in the tree to a generic rule, we synthesize a new monomorphic instance of that rule at top-level with the correct parameters applied.
Constructors
UnboundReference NameMismatchingArgs Name [Name]ArgsToPostlude PTerm [CTree OrReferencedSimple]
Instances3Eq, Show, HasThrow
Eq NameResolutionFailureDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveShow NameResolutionFailureDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveHasThrowDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve"nameResolution"
NameResolutionFailure MonoM
Instances12HasState, HasSink, IndexMappable, HasReader, HasSource, XXCTree, …
HasSourceDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve"synth"
MonoState MonoMHasStateDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve"synth"
MonoState MonoMHasSinkDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve"synth"
MonoState MonoMIndexMappable CTree MonoReferenced GenPhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTree MonoReferenced ValidatorPhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTree MonoReferenced MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTreeRoot MonoReferenced GenPhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTreeRoot MonoReferenced ValidatorPhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTreeRoot MonoReferenced MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveHasReaderDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve"local"
(Map Name (CTree MonoReferenced)) MonoMHasSourceDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve"local"
(Map Name (CTree MonoReferenced)) MonoMdata XXCTree MonoReferencedMRuleRef NameMGenerator (CBORGen RuleTerm) (CTree MonoReferenced)MValidator TermValidator (CTree MonoReferenced)
A simplified phase reachable from any of the function-bearing post-mono phases (MonoReferenced, GenPhase, ValidatorPhase). It strips the generator/validator extensions so the tree can be Shown, Eq-compared, and pretty-printed for debug output.
Instances12IndexMappable, Eq, Show, Generic, Pretty, Rep, …
IndexMappable CTree GenPhase MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTree ValidatorPhase MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTree MonoReferenced MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTreeRoot GenPhase MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTreeRoot ValidatorPhase MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveIndexMappable CTreeRoot MonoReferenced MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveEq (XXCTree MonoSimplePhase)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveShow (XXCTree MonoSimplePhase)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveGeneric (XXCTree MonoSimplePhase)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolvePretty (XXCTree MonoSimplePhase)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolvetype Rep (XXCTree MonoSimplePhase) = D1 ('MetaDataDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve"XXCTree"
"Codec.CBOR.Cuddle.CDDL.Resolve"
"cuddle-1.8.1.0-1n67ahaIhMs3FQkr3b5WBN"
'True) (C1 ('MetaCons"MSimpleRef"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name)))data XXCTree MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve
Project any phase that maps to MonoSimplePhase down to a Showable
representation. Used for debug output by Gen, Validator, etc.
Instances19Eq, Show, Generic, Pretty, Hashable, Rep, …
Eq (XXCTree DistReferencedNoGen)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveEq (XXCTree MonoSimplePhase)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveEq (XXCTree OrReferencedSimple)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveShow (XXCTree DistReferencedNoGen)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveShow (XXCTree MonoSimplePhase)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveShow (XXCTree OrReferencedSimple)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveGeneric (XXCTree MonoSimplePhase)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolvePretty (XXCTree DistReferencedNoGen)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolvePretty (XXCTree MonoSimplePhase)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.ResolveHashable (XXCTree DistReferencedNoGen)Defined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolvetype Rep (XXCTree MonoSimplePhase) = D1 ('MetaDataDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve"XXCTree"
"Codec.CBOR.Cuddle.CDDL.Resolve"
"cuddle-1.8.1.0-1n67ahaIhMs3FQkr3b5WBN"
'True) (C1 ('MetaCons"MSimpleRef"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name)))data XXCTree GenPhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Custom.Generatordata XXCTree ValidatorPhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Custom.Validatordata XXCTree DistReferencedDRef (DistRef DistReferenced)DGenerator (CBORGen RuleTerm) (CTree DistReferenced)DValidator TermValidator (CTree DistReferenced)
data XXCTree DistReferencedNoGenDHRef (DistRef DistReferencedNoGen)
data XXCTree MonoReferencedMRuleRef NameMGenerator (CBORGen RuleTerm) (CTree MonoReferenced)MValidator TermValidator (CTree MonoReferenced)
data XXCTree MonoSimplePhaseDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolvedata XXCTree OrReferencedOrRef Name [CTree OrReferenced]OGenerator (CBORGen RuleTerm) (CTree OrReferenced)OValidator TermValidator (CTree OrReferenced)
data XXCTree OrReferencedSimpleDefined in cuddle-1.8.1.0 · Codec.CBOR.Cuddle.CDDL.Resolve
Reference to another node with possible generic arguments supplied