sig
  type ('s, 'i, 'o) work
  type ('s, 'i, 'o) gate
  type ('x, 'i, 'o) wire
  type ('s, 'i, 'o, 'a) guard =
      (('s, 'i, 'o) Cf_state_gadget.gate, 'a) Cf_cmonad.t
  type ('s, 'i, 'o, 'a) t =
      (('s, 'i, 'o) Cf_state_gadget.work, 'a) Cf_cmonad.t
  val eval : ('s, 'i, 'o, unit) Cf_state_gadget.t -> '-> ('i, 'o) Cf_flow.t
  val start :
    ('s0, 'i, 'o, unit) Cf_state_gadget.t ->
    's0 -> ('s1, 'i, 'o, unit) Cf_state_gadget.t
  val guard :
    ('s, 'i, 'o, unit) Cf_state_gadget.guard ->
    ('s, 'i, 'o, 'a) Cf_state_gadget.t
  val abort : ('s, 'i, 'o, 'a) Cf_state_gadget.t
  val wire :
    ('s, 'i, 'o, ('x, 'i, 'o) Cf_state_gadget.wire) Cf_state_gadget.t
  val wirepair :
    ('s, 'i, 'o,
     ('x, 'i, 'o) Cf_state_gadget.wire * ('y, 'i, 'o) Cf_state_gadget.wire)
    Cf_state_gadget.t
  val null : ('x, 'i, 'o) Cf_state_gadget.wire
  val read : ('s, 'i, 'o, 'i) Cf_state_gadget.t
  val write : '-> ('s, 'i, 'o, unit) Cf_state_gadget.t
  val load : ('s, 'i, 'o, 's) Cf_state_gadget.t
  val store : '-> ('s, 'i, 'o, unit) Cf_state_gadget.t
  val modify : ('-> 's) -> ('s, 'i, 'o, unit) Cf_state_gadget.t
  class type connector = object method check : bool method id : string end
  class ['x, 'i, 'o] rx :
    ('x, 'i, 'o) Cf_state_gadget.wire ->
    object
      method check : bool
      method get :
        ('-> ('s, 'i, 'o, unit) Cf_state_gadget.t) ->
        ('s, 'i, 'o, unit) Cf_state_gadget.guard
      method id : string
    end
  class ['x, 'i, 'o] tx :
    ('x, 'i, 'o) Cf_state_gadget.wire ->
    object
      method check : bool
      method id : string
      method put : '-> ('s, 'i, 'o, unit) Cf_state_gadget.t
    end
  val simplex :
    ('s, 'i, 'o,
     ('x, 'i, 'o) Cf_state_gadget.rx * ('x, 'i, 'o) Cf_state_gadget.tx)
    Cf_state_gadget.t
  type ('x, 'y, 'i, 'o) pad =
      ('x, 'i, 'o) Cf_state_gadget.rx * ('y, 'i, 'o) Cf_state_gadget.tx
  type ('x, 'y, 'i, 'o) fix =
      ('y, 'i, 'o) Cf_state_gadget.rx * ('x, 'i, 'o) Cf_state_gadget.tx
  val duplex :
    ('s, 'i, 'o,
     ('x, 'y, 'i, 'o) Cf_state_gadget.pad *
     ('x, 'y, 'i, 'o) Cf_state_gadget.fix)
    Cf_state_gadget.t
  val wrap :
    ('x, 'i, 'o) #Cf_state_gadget.rx ->
    ('y, 'i, 'o) #Cf_state_gadget.tx ->
    ('x, 'y) Cf_flow.t -> ('s, 'i, 'o, unit) Cf_state_gadget.t
end