sig
  val ( >>= ) :
    ('a, 'p1, 'p2) Phases.t ->
    ('-> ('b, 'p2, 'p3) Phases.t) -> ('b, 'p1, 'p3) Phases.t
  val ( >>?= ) :
    'Phases.or_error ->
    ('-> ('b, 'p1, 'p2) Phases.t) -> ('b, 'p1, 'p2) Phases.t
  val ( >|= ) :
    ('a, 'p1, 'p2) Phases.t -> ('-> 'b) -> ('b, 'p1, 'p2) Phases.t
end