The immutable state of the phase that can also be accessed by other phases.
Run the phase
Recursively push refs from the right-hand side of a Join to the left-hand side out of the join.
Merge nested mapping operations of the form
Bind(_, Bind(_, _, Pure(StructNode(p1), _)), Pure(StructNode(p2), _))
into a single Bind, provided that each element of either p1 or p2 contains not more than one path.
Filter out of of
Bind(_, Filter, Pure(StructNode)).
Filter nodes in
Join generators into join predicates.
The unique name of the phase
Join(s1, _, _, Join(_, _, _, _, JoinType.Inner, on2), JoinType.Inner, on1) where parts
on2 refer to
s1, merge them into