sig
  type t = private int
  val empty : CCBitField.S.t
  type _ field_kind =
      Bool : bool CCBitField.S.field_kind
    | Int : int CCBitField.S.field_kind
  module type FIELD =
    sig
      type value
      val get : CCBitField.S.t -> CCBitField.S.FIELD.value
      val set : CCBitField.S.FIELD.value -> CCBitField.S.t -> CCBitField.S.t
      val width : int
      val name : string
      val kind : CCBitField.S.FIELD.value CCBitField.S.field_kind
    end
  type 'a field = (module CCBitField.S.FIELD with type value = 'a)
  val bool : ?name:string -> unit -> bool CCBitField.S.field
  val int2 : ?name:string -> unit -> int CCBitField.S.field
  val int3 : ?name:string -> unit -> int CCBitField.S.field
  val int : ?name:string -> width:int -> unit -> int CCBitField.S.field
  val freeze : unit -> unit
  val total_width : unit -> int
  type any_field =
      AnyField : (module CCBitField.S.FIELD with type value = 'a) *
        'CCBitField.S.field_kind -> CCBitField.S.any_field
  val iter_fields : (CCBitField.S.any_field -> unit) -> unit
  val pp : Format.formatter -> CCBitField.S.t -> unit
end