sig
  val obus_enum : string
  val obus_flag : string
  val obus_type : string
  val obus_itype : string
  val obus_otype : string
  type basic = private
      Byte
    | Boolean
    | Int16
    | Int32
    | Int64
    | Uint16
    | Uint32
    | Uint64
    | Double
    | String
    | Signature
    | Object_path
    | Unix_fd
    | Enum of OBus_value.T.basic * (OBus_value.V.basic * string) list
    | Flag of OBus_value.T.basic * (OBus_value.V.basic * string) list
  type single =
      Basic of OBus_introspect_ext.basic
    | Structure of OBus_introspect_ext.single list
    | Array of OBus_introspect_ext.single
    | Dict of OBus_introspect_ext.basic * OBus_introspect_ext.single
    | Variant
  type sequence = OBus_introspect_ext.single list
  val byte : OBus_introspect_ext.basic
  val boolean : OBus_introspect_ext.basic
  val int16 : OBus_introspect_ext.basic
  val int32 : OBus_introspect_ext.basic
  val int64 : OBus_introspect_ext.basic
  val uint16 : OBus_introspect_ext.basic
  val uint32 : OBus_introspect_ext.basic
  val uint64 : OBus_introspect_ext.basic
  val double : OBus_introspect_ext.basic
  val string : OBus_introspect_ext.basic
  val signature : OBus_introspect_ext.basic
  val object_path : OBus_introspect_ext.basic
  val unix_fd : OBus_introspect_ext.basic
  val enum :
    OBus_value.T.basic ->
    (OBus_value.V.basic * string) list -> OBus_introspect_ext.basic
  val flag :
    OBus_value.T.basic ->
    (OBus_value.V.basic * string) list -> OBus_introspect_ext.basic
  val basic : OBus_introspect_ext.basic -> OBus_introspect_ext.single
  val structure :
    OBus_introspect_ext.single list -> OBus_introspect_ext.single
  val array : OBus_introspect_ext.single -> OBus_introspect_ext.single
  val dict :
    OBus_introspect_ext.basic ->
    OBus_introspect_ext.single -> OBus_introspect_ext.single
  val variant : OBus_introspect_ext.single
  type term = private
      Term of string * OBus_introspect_ext.term list
    | Tuple of OBus_introspect_ext.term list
  val term :
    string -> OBus_introspect_ext.term list -> OBus_introspect_ext.term
  val tuple : OBus_introspect_ext.term list -> OBus_introspect_ext.term
  type symbol = private
      Sym_enum of OBus_value.T.basic * (OBus_value.V.basic * string) list
    | Sym_flag of OBus_value.T.basic * (OBus_value.V.basic * string) list
  val sym_enum :
    OBus_value.T.basic ->
    (OBus_value.V.basic * string) list -> OBus_introspect_ext.symbol
  val sym_flag :
    OBus_value.T.basic ->
    (OBus_value.V.basic * string) list -> OBus_introspect_ext.symbol
  val strip_basic : OBus_introspect_ext.basic -> OBus_value.T.basic
  val strip_single : OBus_introspect_ext.single -> OBus_value.T.single
  val strip_sequence : OBus_introspect_ext.sequence -> OBus_value.T.sequence
  val project_basic : OBus_value.T.basic -> OBus_introspect_ext.basic
  val project_single : OBus_value.T.single -> OBus_introspect_ext.single
  val project_sequence :
    OBus_value.T.sequence -> OBus_introspect_ext.sequence
  val term_of_basic : OBus_value.T.basic -> OBus_introspect_ext.term
  val term_of_single : OBus_value.T.single -> OBus_introspect_ext.term
  val term_of_sequence : OBus_value.T.sequence -> OBus_introspect_ext.term
  type env = (string * OBus_introspect_ext.symbol) list
  exception Resolve_error of string
  val resolve :
    OBus_introspect_ext.env ->
    OBus_introspect_ext.term -> OBus_introspect_ext.single
  type name = string
  type annotation = OBus_introspect_ext.name * string
  type argument = OBus_introspect_ext.name option * OBus_introspect_ext.term
  type access = OBus_introspect.access = Read | Write | Read_write
  type member =
      Method of OBus_introspect_ext.name *
        OBus_introspect_ext.argument list *
        OBus_introspect_ext.argument list *
        OBus_introspect_ext.annotation list
    | Signal of OBus_introspect_ext.name *
        OBus_introspect_ext.argument list *
        OBus_introspect_ext.annotation list
    | Property of OBus_introspect_ext.name * OBus_introspect_ext.term *
        OBus_introspect_ext.access * OBus_introspect_ext.annotation list
  type interface =
      OBus_introspect_ext.name * OBus_introspect_ext.member list *
      (string * OBus_introspect_ext.symbol) list *
      OBus_introspect_ext.annotation list
  val encode : OBus_introspect_ext.interface -> OBus_introspect.interface
  val decode : OBus_introspect.interface -> OBus_introspect_ext.interface
end