sig
  class virtual ['i, 'o] start :
    object ('a)
      method private virtual guard : ('a, 'i, 'o, unit) Cf_state_gadget.guard
      method start : ('s, 'i, 'o, unit) Cf_state_gadget.t
    end
  class virtual ['i, 'o] next :
    object ('b)
      method private virtual guard : ('b, 'i, 'o, unit) Cf_state_gadget.guard
      method next : ('b, 'i, 'o, 'a) Cf_state_gadget.t
    end
end