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