sig
  type 'a result = Value of '| Fail of exn
  type cancel
  type +'a behavior
  val return : '-> 'Froc.behavior
  val fail : exn -> 'Froc.behavior
  val bind :
    ?eq:('-> '-> bool) ->
    'Froc.behavior -> ('-> 'Froc.behavior) -> 'Froc.behavior
  val ( >>= ) :
    'Froc.behavior -> ('-> 'Froc.behavior) -> 'Froc.behavior
  val blift :
    ?eq:('-> '-> bool) ->
    'Froc.behavior -> ('-> 'a) -> 'Froc.behavior
  val lift :
    ?eq:('-> '-> bool) ->
    ('-> 'a) -> 'Froc.behavior -> 'Froc.behavior
  val sample : 'Froc.behavior -> 'a
  val sample_result : 'Froc.behavior -> 'Froc.result
  val catch :
    ?eq:('-> '-> bool) ->
    (unit -> 'Froc.behavior) ->
    (exn -> 'Froc.behavior) -> 'Froc.behavior
  val catch_lift :
    ?eq:('-> '-> bool) ->
    (unit -> 'Froc.behavior) -> (exn -> 'a) -> 'Froc.behavior
  val try_bind :
    ?eq:('-> '-> bool) ->
    (unit -> 'Froc.behavior) ->
    ('-> 'Froc.behavior) -> (exn -> 'Froc.behavior) -> 'Froc.behavior
  val try_bind_lift :
    ?eq:('-> '-> bool) ->
    (unit -> 'Froc.behavior) ->
    ('-> 'a) -> (exn -> 'a) -> 'Froc.behavior
  val join_b :
    ?eq:('-> '-> bool) ->
    'Froc.behavior Froc.behavior -> 'Froc.behavior
  val fix_b :
    ?eq:('-> '-> bool) ->
    ('Froc.behavior -> 'Froc.behavior) -> 'Froc.behavior
  val notify_b : ?now:bool -> 'Froc.behavior -> ('-> unit) -> unit
  val notify_b_cancel :
    ?now:bool -> 'Froc.behavior -> ('-> unit) -> Froc.cancel
  val notify_result_b :
    ?now:bool -> 'Froc.behavior -> ('Froc.result -> unit) -> unit
  val notify_result_b_cancel :
    ?now:bool -> 'Froc.behavior -> ('Froc.result -> unit) -> Froc.cancel
  val hash_behavior : 'Froc.behavior -> int
  type +'a event
  type -'a event_sender
  val make_event : unit -> 'Froc.event * 'Froc.event_sender
  val never : 'Froc.event
  val notify_e : 'Froc.event -> ('-> unit) -> unit
  val notify_e_cancel : 'Froc.event -> ('-> unit) -> Froc.cancel
  val notify_result_e : 'Froc.event -> ('Froc.result -> unit) -> unit
  val notify_result_e_cancel :
    'Froc.event -> ('Froc.result -> unit) -> Froc.cancel
  val send : 'Froc.event_sender -> '-> unit
  val send_exn : 'Froc.event_sender -> exn -> unit
  val send_result : 'Froc.event_sender -> 'Froc.result -> unit
  val send_deferred : 'Froc.event_sender -> '-> unit
  val send_exn_deferred : 'Froc.event_sender -> exn -> unit
  val send_result_deferred : 'Froc.event_sender -> 'Froc.result -> unit
  val next : 'Froc.event -> 'Froc.event
  val merge : 'Froc.event list -> 'Froc.event
  val map : ('-> 'b) -> 'Froc.event -> 'Froc.event
  val map2 :
    ('-> '-> 'c) -> 'Froc.event -> 'Froc.event -> 'Froc.event
  val filter : ('-> bool) -> 'Froc.event -> 'Froc.event
  val collect : ('-> '-> 'a) -> '-> 'Froc.event -> 'Froc.event
  val join_e : 'Froc.event Froc.event -> 'Froc.event
  val fix_e : ('Froc.event -> 'Froc.event) -> 'Froc.event
  val hash_event : 'Froc.event -> int
  val switch :
    ?eq:('-> '-> bool) ->
    'Froc.behavior -> 'Froc.behavior Froc.event -> 'Froc.behavior
  val until :
    ?eq:('-> '-> bool) ->
    'Froc.behavior -> 'Froc.behavior Froc.event -> 'Froc.behavior
  val hold :
    ?eq:('-> '-> bool) -> '-> 'Froc.event -> 'Froc.behavior
  val hold_result :
    ?eq:('-> '-> bool) ->
    'Froc.result -> 'Froc.event -> 'Froc.behavior
  val changes : 'Froc.behavior -> 'Froc.event
  val when_true : bool Froc.behavior -> unit Froc.event
  val count : 'Froc.event -> int Froc.behavior
  val make_cell : '-> 'Froc.behavior * ('-> unit)
  val init : unit -> unit
  val no_cancel : Froc.cancel
  val cancel : Froc.cancel -> unit
  val cleanup : (unit -> unit) -> unit
  val memo :
    ?size:int ->
    ?hash:('-> int) ->
    ?eq:('-> '-> bool) -> unit -> ('-> 'b) -> '-> 'b
  val set_exn_handler : (exn -> unit) -> unit
  val set_debug : (string -> unit) -> unit
  val bind2 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior -> ('-> '-> 'Froc.behavior) -> 'Froc.behavior
  val blift2 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior -> ('-> '-> 'a) -> 'Froc.behavior
  val lift2 :
    ?eq:('-> '-> bool) ->
    ('-> '-> 'a) ->
    'Froc.behavior -> 'Froc.behavior -> 'Froc.behavior
  val bind3 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    ('-> '-> '-> 'Froc.behavior) -> 'Froc.behavior
  val blift3 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior -> ('-> '-> '-> 'a) -> 'Froc.behavior
  val lift3 :
    ?eq:('-> '-> bool) ->
    ('-> '-> '-> 'a) ->
    'Froc.behavior ->
    'Froc.behavior -> 'Froc.behavior -> 'Froc.behavior
  val bind4 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    ('-> '-> '-> '-> 'Froc.behavior) -> 'Froc.behavior
  val blift4 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior -> ('-> '-> '-> '-> 'a) -> 'Froc.behavior
  val lift4 :
    ?eq:('-> '-> bool) ->
    ('-> '-> '-> '-> 'a) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior -> 'Froc.behavior -> 'Froc.behavior
  val bind5 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    ('-> '-> '-> '-> '-> 'Froc.behavior) -> 'Froc.behavior
  val blift5 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    ('-> '-> '-> '-> '-> 'a) -> 'Froc.behavior
  val lift5 :
    ?eq:('-> '-> bool) ->
    ('-> '-> '-> '-> '-> 'a) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior -> 'Froc.behavior -> 'Froc.behavior
  val bind6 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    ('-> '-> '-> '-> '-> '-> 'Froc.behavior) ->
    'Froc.behavior
  val blift6 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    ('-> '-> '-> '-> '-> '-> 'a) -> 'Froc.behavior
  val lift6 :
    ?eq:('-> '-> bool) ->
    ('-> '-> '-> '-> '-> '-> 'a) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior -> 'Froc.behavior -> 'Froc.behavior
  val bind7 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    ('-> '-> '-> '-> '-> '-> '-> 'Froc.behavior) ->
    'Froc.behavior
  val blift7 :
    ?eq:('-> '-> bool) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    ('-> '-> '-> '-> '-> '-> '-> 'a) -> 'Froc.behavior
  val lift7 :
    ?eq:('-> '-> bool) ->
    ('-> '-> '-> '-> '-> '-> '-> 'a) ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior ->
    'Froc.behavior -> 'Froc.behavior -> 'Froc.behavior
  val bindN :
    ?eq:('-> '-> bool) ->
    'Froc.behavior list ->
    ('b list -> 'Froc.behavior) -> 'Froc.behavior
  val bliftN :
    ?eq:('-> '-> bool) ->
    'Froc.behavior list -> ('b list -> 'a) -> 'Froc.behavior
  val liftN :
    ?eq:('-> '-> bool) ->
    ('b list -> 'a) -> 'Froc.behavior list -> 'Froc.behavior
end