sig
  type _ t = ..
  external perform : 'Effect.t -> 'a = "%perform"
  module Deep :
    sig
      type ('a, 'b) continuation
      val continue : ('a, 'b) Effect.Deep.continuation -> '-> 'b
      val discontinue : ('a, 'b) Effect.Deep.continuation -> exn -> 'b
      val discontinue_with_backtrace :
        ('a, 'b) Effect.Deep.continuation ->
        exn -> Stdlib.Printexc.raw_backtrace -> 'b
      type ('a, 'b) handler = {
        retc : '-> 'b;
        exnc : exn -> 'b;
        effc :
          'c. 'Effect.t -> (('c, 'b) Effect.Deep.continuation -> 'b) option;
      }
      val match_with : ('-> 'a) -> '-> ('a, 'b) Effect.Deep.handler -> 'b
      type 'a effect_handler = {
        effc :
          'b. 'Effect.t -> (('b, 'a) Effect.Deep.continuation -> 'a) option;
      }
      val try_with : ('-> 'a) -> '-> 'Effect.Deep.effect_handler -> 'a
      external get_callstack :
        ('a, 'b) Effect.Deep.continuation ->
        int -> Stdlib.Printexc.raw_backtrace
        = "caml_get_continuation_callstack"
    end
  module Shallow :
    sig
      type ('a, 'b) continuation
      val fiber : ('-> 'b) -> ('a, 'b) Effect.Shallow.continuation
      type ('a, 'b) handler = {
        retc : '-> 'b;
        exnc : exn -> 'b;
        effc :
          'c.
            'Effect.t ->
            (('c, 'a) Effect.Shallow.continuation -> 'b) option;
      }
      val continue_with :
        ('c, 'a) Effect.Shallow.continuation ->
        '-> ('a, 'b) Effect.Shallow.handler -> 'b
      val discontinue_with :
        ('c, 'a) Effect.Shallow.continuation ->
        exn -> ('a, 'b) Effect.Shallow.handler -> 'b
      val discontinue_with_backtrace :
        ('a, 'b) Effect.Shallow.continuation ->
        exn ->
        Stdlib.Printexc.raw_backtrace ->
        ('b, 'c) Effect.Shallow.handler -> 'c
      external get_callstack :
        ('a, 'b) Effect.Shallow.continuation ->
        int -> Stdlib.Printexc.raw_backtrace
        = "caml_get_continuation_callstack"
    end
end