functor (U : Updater->
  sig
    module rec TimeVaryReact :
      sig
        type 'a t
        val make : '-> 'a t * ('-> unit)
        val put : 'a t -> 'a t -> unit
        val set : 'a t -> '-> unit
        val read : 'a t -> 'a
        val return : '-> 'a t
        val map : ('-> 'b) -> 'a t -> 'b t
        val map2 : ('-> '-> 'c) -> 'a t -> 'b t -> 'c t
        val map3 : ('-> '-> '-> 'd) -> 'a t -> 'b t -> 'c t -> 'd t
        val app : ('-> 'b) t -> 'a t -> 'b t
        val sequence : 'a t list -> 'a list t
        val changes : ?eq:('-> '-> bool) -> 'a t -> 'a t
        val history : int -> 'a t -> 'a list t
        val delay : int -> 'a t -> 'a t
        val delay_while : ('-> bool) -> 'a t -> 'a t
        val bind : 'a t -> ('-> 'b t) -> 'b t
        val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
        val join : 'a t t -> 'a t
        val switch : 'a t -> 'a t TimeVaryEvent.t -> 'a t
        val reduce : '-> ('-> 'a) TimeVaryEvent.t -> 'a t
        val fold : ('-> '-> 'a) -> '-> 'TimeVaryEvent.t -> 'a t
        val event : 'a t -> 'TimeVaryEvent.t
      end
    and TimeVaryEvent :
      sig
        type 'a t
        type listen_id
        val make : unit -> 'a t * ('-> unit)
        val listen : ('-> unit) -> 'a t -> listen_id
        val weak_listen : ('-> unit) -> 'a t -> listen_id
        val clear_listen : 'a t -> unit
        val remove_listen : 'a t -> listen_id -> unit
        val return : '-> 'a t
        val bind : 'a t -> ('-> 'b t) -> 'b t
        val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
        val join : 'a t t -> 'a t
        val switch : 'a t -> 'a t t -> 'a t
        val never : unit -> 'a t
        val map : ('-> 'b) -> 'a t -> 'b t
        val map2 : ('-> '-> 'c) -> 'a t -> 'b t -> 'c t
        val app : ('-> 'b) t -> 'a t -> 'b t
        val merge : 'a t -> 'a t -> 'a t
        val filter : ('-> bool) -> 'a t -> 'a t
        val filter_map : ('-> 'b option) -> 'a t -> 'b t
        val changes : ?eq:('-> '-> bool) -> '-> 'a t -> 'a t
        val history : int -> 'a t -> 'a list t
        val reduce : '-> ('-> 'a) t -> 'a t
        val fold : ('-> '-> 'a) -> '-> 'b t -> 'a t
        val select : 'a t list -> 'a t
        val take : int -> 'a t -> 'a t
        val take_while : ('-> bool) -> 'a t -> 'a t
        val drop : int -> 'a t -> 'a t
        val drop_while : ('-> bool) -> 'a t -> 'a t
        val zip : 'a t -> 'b t -> ('a * 'b) t
        val sequence : 'a t list -> 'a list t
        val future : ('-> 'b) -> '-> 'b t
        val react : '-> 'a t -> 'TimeVaryReact.t
      end
  end