sig
  module Operation :
    sig
      type t = Insert | Update | Delete
      val t_of_sexp : Sexplib.Sexp.t -> Response.Book_update.Operation.t
      val sexp_of_t : Response.Book_update.Operation.t -> Sexplib.Sexp.t
    end
  module Side :
    sig
      type t = Ask | Bid
      val t_of_sexp : Sexplib.Sexp.t -> Response.Book_update.Side.t
      val sexp_of_t : Response.Book_update.Side.t -> Sexplib.Sexp.t
    end
  type t = private {
    position : int;
    operation : Response.Book_update.Operation.t;
    side : Response.Book_update.Side.t;
    price : Price.t;
    size : Volume.t;
  }
  val size : Response.Book_update.t -> Volume.t
  val price : Response.Book_update.t -> Price.t
  val side : Response.Book_update.t -> Response.Book_update.Side.t
  val operation : Response.Book_update.t -> Response.Book_update.Operation.t
  val position : Response.Book_update.t -> int
  module Fields :
    sig
      val names : string list
      val size :
        (Response.Book_update.t, Volume.t) Fieldslib.Field.readonly_t
      val price :
        (Response.Book_update.t, Price.t) Fieldslib.Field.readonly_t
      val side :
        (Response.Book_update.t, Response.Book_update.Side.t)
        Fieldslib.Field.readonly_t
      val operation :
        (Response.Book_update.t, Response.Book_update.Operation.t)
        Fieldslib.Field.readonly_t
      val position : (Response.Book_update.t, int) Fieldslib.Field.readonly_t
      val fold :
        init:'acc__ ->
        position:('acc__ ->
                  (Response.Book_update.t, int) Fieldslib.Field.readonly_t ->
                  'acc__) ->
        operation:('acc__ ->
                   (Response.Book_update.t, Response.Book_update.Operation.t)
                   Fieldslib.Field.readonly_t -> 'acc__) ->
        side:('acc__ ->
              (Response.Book_update.t, Response.Book_update.Side.t)
              Fieldslib.Field.readonly_t -> 'acc__) ->
        price:('acc__ ->
               (Response.Book_update.t, Price.t) Fieldslib.Field.readonly_t ->
               'acc__) ->
        size:('acc__ ->
              (Response.Book_update.t, Volume.t) Fieldslib.Field.readonly_t ->
              'acc__) ->
        'acc__
      val iter :
        position:((Response.Book_update.t, int) Fieldslib.Field.readonly_t ->
                  unit) ->
        operation:((Response.Book_update.t, Response.Book_update.Operation.t)
                   Fieldslib.Field.readonly_t -> unit) ->
        side:((Response.Book_update.t, Response.Book_update.Side.t)
              Fieldslib.Field.readonly_t -> unit) ->
        price:((Response.Book_update.t, Price.t) Fieldslib.Field.readonly_t ->
               unit) ->
        size:((Response.Book_update.t, Volume.t) Fieldslib.Field.readonly_t ->
              unit) ->
        unit
      val for_all :
        position:((Response.Book_update.t, int) Fieldslib.Field.readonly_t ->
                  bool) ->
        operation:((Response.Book_update.t, Response.Book_update.Operation.t)
                   Fieldslib.Field.readonly_t -> bool) ->
        side:((Response.Book_update.t, Response.Book_update.Side.t)
              Fieldslib.Field.readonly_t -> bool) ->
        price:((Response.Book_update.t, Price.t) Fieldslib.Field.readonly_t ->
               bool) ->
        size:((Response.Book_update.t, Volume.t) Fieldslib.Field.readonly_t ->
              bool) ->
        bool
      val exists :
        position:((Response.Book_update.t, int) Fieldslib.Field.readonly_t ->
                  bool) ->
        operation:((Response.Book_update.t, Response.Book_update.Operation.t)
                   Fieldslib.Field.readonly_t -> bool) ->
        side:((Response.Book_update.t, Response.Book_update.Side.t)
              Fieldslib.Field.readonly_t -> bool) ->
        price:((Response.Book_update.t, Price.t) Fieldslib.Field.readonly_t ->
               bool) ->
        size:((Response.Book_update.t, Volume.t) Fieldslib.Field.readonly_t ->
              bool) ->
        bool
      val to_list :
        position:((Response.Book_update.t, int) Fieldslib.Field.readonly_t ->
                  'elem__) ->
        operation:((Response.Book_update.t, Response.Book_update.Operation.t)
                   Fieldslib.Field.readonly_t -> 'elem__) ->
        side:((Response.Book_update.t, Response.Book_update.Side.t)
              Fieldslib.Field.readonly_t -> 'elem__) ->
        price:((Response.Book_update.t, Price.t) Fieldslib.Field.readonly_t ->
               'elem__) ->
        size:((Response.Book_update.t, Volume.t) Fieldslib.Field.readonly_t ->
              'elem__) ->
        'elem__ list
      val map_poly :
        ([< `Read ], Response.Book_update.t, 'x0) Fieldslib.Field.user ->
        'x0 list
      module Direct :
        sig
          val iter :
            Response.Book_update.t ->
            position:((Response.Book_update.t, int)
                      Fieldslib.Field.readonly_t ->
                      Response.Book_update.t -> int -> unit) ->
            operation:((Response.Book_update.t,
                        Response.Book_update.Operation.t)
                       Fieldslib.Field.readonly_t ->
                       Response.Book_update.t ->
                       Response.Book_update.Operation.t -> unit) ->
            side:((Response.Book_update.t, Response.Book_update.Side.t)
                  Fieldslib.Field.readonly_t ->
                  Response.Book_update.t ->
                  Response.Book_update.Side.t -> unit) ->
            price:((Response.Book_update.t, Price.t)
                   Fieldslib.Field.readonly_t ->
                   Response.Book_update.t -> Price.t -> unit) ->
            size:((Response.Book_update.t, Volume.t)
                  Fieldslib.Field.readonly_t ->
                  Response.Book_update.t -> Volume.t -> unit) ->
            unit
          val fold :
            Response.Book_update.t ->
            init:'acc__ ->
            position:('acc__ ->
                      (Response.Book_update.t, int)
                      Fieldslib.Field.readonly_t ->
                      Response.Book_update.t -> int -> 'acc__) ->
            operation:('acc__ ->
                       (Response.Book_update.t,
                        Response.Book_update.Operation.t)
                       Fieldslib.Field.readonly_t ->
                       Response.Book_update.t ->
                       Response.Book_update.Operation.t -> 'acc__) ->
            side:('acc__ ->
                  (Response.Book_update.t, Response.Book_update.Side.t)
                  Fieldslib.Field.readonly_t ->
                  Response.Book_update.t ->
                  Response.Book_update.Side.t -> 'acc__) ->
            price:('acc__ ->
                   (Response.Book_update.t, Price.t)
                   Fieldslib.Field.readonly_t ->
                   Response.Book_update.t -> Price.t -> 'acc__) ->
            size:('acc__ ->
                  (Response.Book_update.t, Volume.t)
                  Fieldslib.Field.readonly_t ->
                  Response.Book_update.t -> Volume.t -> 'acc__) ->
            'acc__
        end
    end
  val unpickler : t Tws_prot.Unpickler.t
  val pickler : t Tws_prot.Pickler.t Core.Std.Only_in_test.t
  val ( = ) : t -> t -> bool
  val create :
    position:int ->
    operation:Response.Book_update.Operation.t ->
    side:Response.Book_update.Side.t ->
    price:Price.t -> size:Volume.t -> Response.Book_update.t
  val t_of_sexp : Sexplib.Sexp.t -> Response.Book_update.t
  val sexp_of_t : Response.Book_update.t -> Sexplib.Sexp.t
end