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