Return a new compiler with the new phase added at the end.
Return a new compiler without the given phase (or a different implementation of the same phase name.
Return a new compiler with the new phase added directly after another phase (or a different implementation of the same phase name).
Return a new compiler that replaces an existing phase by a new one with the same name.
Return a new compiler that replaces an existing phase by a new one with the same name. The new phase must have a State that is assignable to the original phase's state.
An immutable, stateless query compiler consisting of a series of phases