sig
  type 'a t
  val create : unit -> 'Signal.t
  val send : 'Signal.t -> '-> unit
  val on : 'Signal.t -> ('-> bool) -> unit
  val once : 'Signal.t -> ('-> 'b) -> unit
  val propagate : 'Signal.t -> 'Signal.t -> unit
end