Code which replaces pattern matching on record constructors with uses of projection functions.
Replaces pattern matching on record constructors with uses of projection functions. Does not remove record constructor patterns which have sub-patterns containing non-record constructor or literal patterns.
If the input clause contains dot patterns inside record patterns,
then the translation may yield clauses which are not type-correct.
However, we believe that it is safe to use the output as input to
it would be better to perform record pattern translation on the
compiled clauses instead, but the code below has already been
implemented and seems to work.
Bottom-up procedure to record-pattern-translate split tree.
Take a record pattern
p and yield a list of projections
corresponding to the pattern variables, from left to right.
(x , (y , z)) we return
[ fst, fst . snd, snd . snd ].
If it is not a record pattern, error
ShouldBeRecordPattern is raised.