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