sig
  val print_widget : Format.formatter -> #GObj.widget -> unit
  class ['a] memo :
    unit ->
    object
      constraint 'a = < get_oid : int; .. >
      val tbl : (int, 'a) Hashtbl.t
      method add : '-> unit
      method find : GObj.widget -> 'a
      method remove : GObj.widget -> unit
    end
  val next_callback_id : unit -> GtkSignal.id
  class ['a] signal :
    unit ->
    object
      val mutable callbacks : (GtkSignal.id * ('-> unit)) list
      method call : '-> unit
      method callbacks : (GtkSignal.id * ('-> unit)) list
      method connect : after:bool -> callback:('-> unit) -> GtkSignal.id
      method disconnect : GtkSignal.id -> bool
    end
  class virtual ml_signals :
    (GtkSignal.id -> bool) list ->
    object ('a)
      val after : bool
      val mutable disconnectors : (GtkSignal.id -> bool) list
      method after : 'a
      method disconnect : GtkSignal.id -> unit
    end
  class virtual add_ml_signals :
    'Gtk.obj ->
    (GtkSignal.id -> bool) list ->
    object
      val mutable disconnectors : (GtkSignal.id -> bool) list
      method disconnect : GtkSignal.id -> unit
    end
  class ['a] variable_signals :
    set:'GUtil.signal ->
    changed:'GUtil.signal ->
    object ('b)
      val after : bool
      val mutable disconnectors : (GtkSignal.id -> bool) list
      method after : 'b
      method changed : callback:('-> unit) -> GtkSignal.id
      method disconnect : GtkSignal.id -> unit
      method set : callback:('-> unit) -> GtkSignal.id
    end
  class ['a] variable :
    '->
    object
      val changed : 'GUtil.signal
      val set : 'GUtil.signal
      val mutable x : 'a
      method connect : 'GUtil.variable_signals
      method private equal : '-> '-> bool
      method get : 'a
      method private real_set : '-> unit
      method set : '-> unit
    end
end