Combinator Design and Implementation
Internally, the Combinators use custom trace types.
Gen.VectorTrace
— TypeVectorTrace <: Trace
U is the type of the subtrace, R is the return value type for the kernel
Gen.process_all_new!
— FunctionProcess all new applications.
Process all new applications.
Gen.update_recurse_merge
— Functionupdate_recurse_merge(prev_choices::ChoiceMap, choices::ChoiceMap)
Returns choices that are in constraints, merged with all choices in the previous trace that do not have the same address as some choice in the constraints."
Gen.update_discard
— Functionupdate_discard(prev_choices::ChoiceMap, choices::ChoiceMap, new_choices::ChoiceMap)
Returns choices from previous trace that:
- have an address which does not appear in the new trace.
- have an address which does appear in the constraints.