Make a TreeMaker that will result in an extractor call specified by
the next TreeMaker (here, we don't know which it'll be) is chained after this one by flatMap'ing
a function with binder
nextBinder over our extractor's result
the function's body is determined by the next TreeMaker
(furthermore, the interpretation of
flatMap depends on the codegen instance we're using).
An optimized version of ExtractorTreeMaker for Products.
implements the run-time aspects of (§8.2) (typedPattern has already done the necessary type transformations)
A conservative approximation of which patterns do not discern anything.
The translation of
pat if guard => body has two aspects:
1) the substitution due to the variables bound by patterns
2) the combination of the extractor calls using
Implement a pattern match by turning its cases (including the implicit failure case)
into the corresponding (monadic) extractors, and combining them with the