sig
  type splitstays = LeftStays | RightStays
  and splitorder = Incubator.splitstays * int
  and joinorder = FirstLeft | FirstRight
  exception Not_a_ligand
  module Procunit :
    sig
      exception Already_configured
      class virtual t :
        object
          method virtual click : unit -> bool
          method extract_ligand : Ligand.t
          method virtual get_initial_lbprojs : unit -> bool array
          method virtual get_initial_sbprojs : unit -> bool array
          method lb_change_string : int -> string -> unit
          method virtual lb_get_marker : int -> Ligand.Matcher.matcher
          method lb_join : int -> int -> Incubator.joinorder -> unit
          method lb_release : int -> unit
          method lb_set_act : int -> bool -> unit
          method lb_split : int -> int -> Incubator.splitorder -> unit
          method lb_synth_string : int -> string -> unit
          method lb_transfer : int -> int -> unit
          method virtual lb_unimate : int -> string -> unit
          method virtual lb_unirelease : int -> unit
          method notify : unit -> unit
          method virtual sb_get_marker : int -> Ligand.Matcher.snippet
          method sb_release : int -> unit
          method sb_set_act : int -> bool -> unit
          method virtual sb_unimate : int -> string -> unit
          method virtual sb_unirelease : int -> unit
          method set_notifier : Incubator.Procunit.notifier -> unit
        end
      class virtual notifier :
        object
          method virtual lb_change_string : int -> string -> unit
          method virtual lb_join : int -> int -> Incubator.joinorder -> unit
          method virtual lb_release : int -> unit
          method virtual lb_set_act : int -> bool -> unit
          method virtual lb_split :
            int -> int -> Incubator.splitorder -> unit
          method virtual lb_synth_string : int -> string -> unit
          method virtual lb_transfer : int -> int -> unit
          method virtual notify : unit -> unit
          method virtual sb_release : int -> unit
          method virtual sb_set_act : int -> bool -> unit
        end
      type typeA_proj = {
        matcher : Ligand.Matcher.matcher;
        initially_active : bool;
        func : Incubator.Procunit.notifier -> string -> unit;
      } 
      and typeA_conf = Incubator.Procunit.typeA_proj array
      val make_typeA_pu :
        Incubator.Procunit.typeA_conf -> Incubator.Procunit.t
    end
  type resident
  class t :
    object
      method add_ligand : Ligand.t -> Incubator.resident
      method add_procunit : Incubator.Procunit.t -> Incubator.resident
      method break : unit -> unit
      method is_running : unit -> bool
      method list_ligands : Incubator.resident list
      method remove : Incubator.resident -> unit
      method resident_to_ligand : Incubator.resident -> Ligand.t
      method run : unit -> unit
    end
end