sig
  module Monitor :
    sig
      type 'execution_context t_ =
        'execution_context Raw_monitor.t_ = {
        name : Core.Std.Info.t;
        here : Core.Std.Source_code_position.t option;
        id : int;
        parent : 'execution_context t_ option;
        errors : (exn, 'execution_context) Raw_tail.t;
        mutable has_seen_error : bool;
        mutable someone_is_listening : bool;
      }
      val someone_is_listening : 'a t_ -> bool
      val set_someone_is_listening : 'a t_ -> bool -> unit
      val has_seen_error : 'a t_ -> bool
      val set_has_seen_error : 'a t_ -> bool -> unit
      val errors : 'a t_ -> (exn, 'a) Raw_tail.t
      val parent : 'a t_ -> 'a t_ option
      val id : 'a t_ -> int
      val here : 'a t_ -> Core.Std.Source_code_position.t option
      val name : 'a t_ -> Core.Std.Info.t
      module Fields :
        sig
          val someone_is_listening : ('a t_, bool) Fieldslib.Field.t
          val has_seen_error : ('a t_, bool) Fieldslib.Field.t
          val errors :
            ('execution_context t_, (exn, 'execution_context) Raw_tail.t)
            Fieldslib.Field.t
          val parent :
            ('execution_context t_, 'execution_context t_ option)
            Fieldslib.Field.t
          val id : ('a t_, int) Fieldslib.Field.t
          val here :
            ('a t_, Core.Std.Source_code_position.t option) Fieldslib.Field.t
          val name : ('a t_, Core.Std.Info.t) Fieldslib.Field.t
        end
      module Pretty :
        sig
          type one =
            Raw_monitor.Pretty.one = {
            name : Core.Std.Info.t;
            here : Core.Std.Source_code_position.t option;
            id : int;
            has_seen_error : bool;
            someone_is_listening : bool;
          }
          val sexp_of_one : one -> Sexplib.Sexp.t
          type t = one list
          val sexp_of_t : one Core.Std.List.t -> Sexplib.Sexp.t
        end
      val to_pretty : 'a t_ -> Pretty.one Core.Std.List.t
      val sexp_of_t_ : '-> 'b t_ -> Sexplib.Sexp.t
      exception Shutdown
      val ounit_tests : unit -> OUnit.test
    end
  type t =
    Execution_context.t = {
    work_group : Work_group.t Backpatched.t;
    monitor : t Monitor.t_ Backpatched.t;
    priority : Priority.t;
    backtrace_history : Core.Std.Backtrace.t list;
  }
  val sexp_of_t : t -> Sexplib.Sexp.t
  val backtrace_history : t -> Core.Std.Backtrace.t list
  val priority : t -> Priority.t
  module Fields :
    sig
      val names : string list
      val backtrace_history :
        (t, Core.Std.Backtrace.t list) Fieldslib.Field.t
      val priority : (t, Priority.t) Fieldslib.Field.t
      val monitor : (t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t
      val work_group : (t, Work_group.t Backpatched.t) Fieldslib.Field.t
      val make_creator :
        work_group:((t, Work_group.t Backpatched.t) Fieldslib.Field.t ->
                    '-> ('-> Work_group.t Backpatched.t) * 'c) ->
        monitor:((t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t ->
                 '-> ('-> t Monitor.t_ Backpatched.t) * 'd) ->
        priority:((t, Priority.t) Fieldslib.Field.t ->
                  '-> ('-> Priority.t) * 'e) ->
        backtrace_history:((t, Core.Std.Backtrace.t list) Fieldslib.Field.t ->
                           '-> ('-> Core.Std.Backtrace.t list) * 'f) ->
        '-> ('-> t) * 'f
      val create :
        work_group:Work_group.t Backpatched.t ->
        monitor:t Monitor.t_ Backpatched.t ->
        priority:Priority.t ->
        backtrace_history:Core.Std.Backtrace.t list -> t
      val iter :
        work_group:((t, Work_group.t Backpatched.t) Fieldslib.Field.t -> unit) ->
        monitor:((t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t -> unit) ->
        priority:((t, Priority.t) Fieldslib.Field.t -> unit) ->
        backtrace_history:((t, Core.Std.Backtrace.t list) Fieldslib.Field.t ->
                           'a) ->
        'a
      val fold :
        init:'->
        work_group:('->
                    (t, Work_group.t Backpatched.t) Fieldslib.Field.t -> 'b) ->
        monitor:('->
                 (t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t -> 'c) ->
        priority:('-> (t, Priority.t) Fieldslib.Field.t -> 'd) ->
        backtrace_history:('->
                           (t, Core.Std.Backtrace.t list) Fieldslib.Field.t ->
                           'e) ->
        'e
      val map :
        work_group:((t, Work_group.t Backpatched.t) Fieldslib.Field.t ->
                    Work_group.t Backpatched.t) ->
        monitor:((t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t ->
                 t Monitor.t_ Backpatched.t) ->
        priority:((t, Priority.t) Fieldslib.Field.t -> Priority.t) ->
        backtrace_history:((t, Core.Std.Backtrace.t list) Fieldslib.Field.t ->
                           Core.Std.Backtrace.t list) ->
        t
      val map_poly : (t, 'a) Fieldslib.Field.user -> 'a list
      val for_all :
        work_group:((t, Work_group.t Backpatched.t) Fieldslib.Field.t -> bool) ->
        monitor:((t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t -> bool) ->
        priority:((t, Priority.t) Fieldslib.Field.t -> bool) ->
        backtrace_history:((t, Core.Std.Backtrace.t list) Fieldslib.Field.t ->
                           bool) ->
        bool
      val exists :
        work_group:((t, Work_group.t Backpatched.t) Fieldslib.Field.t -> bool) ->
        monitor:((t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t -> bool) ->
        priority:((t, Priority.t) Fieldslib.Field.t -> bool) ->
        backtrace_history:((t, Core.Std.Backtrace.t list) Fieldslib.Field.t ->
                           bool) ->
        bool
      val to_list :
        work_group:((t, Work_group.t Backpatched.t) Fieldslib.Field.t -> 'a) ->
        monitor:((t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t -> 'a) ->
        priority:((t, Priority.t) Fieldslib.Field.t -> 'a) ->
        backtrace_history:((t, Core.Std.Backtrace.t list) Fieldslib.Field.t ->
                           'a) ->
        'a list
      module Direct :
        sig
          val iter :
            t ->
            work_group:((t, Work_group.t Backpatched.t) Fieldslib.Field.t ->
                        t -> Work_group.t Backpatched.t -> unit) ->
            monitor:((t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t ->
                     t -> t Monitor.t_ Backpatched.t -> unit) ->
            priority:((t, Priority.t) Fieldslib.Field.t ->
                      t -> Priority.t -> unit) ->
            backtrace_history:((t, Core.Std.Backtrace.t list)
                               Fieldslib.Field.t ->
                               t -> Core.Std.Backtrace.t list -> 'a) ->
            'a
          val fold :
            t ->
            init:'->
            work_group:('->
                        (t, Work_group.t Backpatched.t) Fieldslib.Field.t ->
                        t -> Work_group.t Backpatched.t -> 'b) ->
            monitor:('->
                     (t, t Monitor.t_ Backpatched.t) Fieldslib.Field.t ->
                     t -> t Monitor.t_ Backpatched.t -> 'c) ->
            priority:('->
                      (t, Priority.t) Fieldslib.Field.t ->
                      t -> Priority.t -> 'd) ->
            backtrace_history:('->
                               (t, Core.Std.Backtrace.t list)
                               Fieldslib.Field.t ->
                               t -> Core.Std.Backtrace.t list -> 'e) ->
            'e
        end
    end
  val invariant : t -> unit
  val main_work_group_hole : Work_group.t Backpatched.Hole.t
  val main_monitor_hole : t Monitor.t_ Backpatched.Hole.t
  val main : t
  val work_group : t -> Work_group.t
  val monitor : t -> t Monitor.t_
  val create_like :
    ?work_group:Work_group.t ->
    ?monitor:t Monitor.t_ -> ?priority:Priority.t -> t -> t
  val record_backtrace : t -> t
  val ounit_tests : unit -> OUnit.test
end