sig
  type ('a, 'b) t constraint 'a = [< Order_action.t ]
    constraint 'b = [< Order_type.t ]
  val of_raw : Raw_order.t -> ([< Order_action.t ], [< Order_type.t ]) t
  val to_raw : ([< Order_action.t ], [< Order_type.t ]) t -> Raw_order.t
  val ( = ) :
    ([< Order_action.t ] as 'a, [< Order_type.t ] as 'b) Order.t ->
    ('a, 'b) Order.t -> bool
  val order_type :
    ([< Order_action.t ], [< Order_type.t ]) Order.t -> Order_type.t
  val quantity : ([< Order_action.t ], [< Order_type.t ]) Order.t -> Volume.t
  val buy_limit :
    quantity:Volume.t ->
    Price.t ->
    ([< Order_action.t > `Buy ], [< Order_type.t > `Limit ]) Order.t
  val sell_limit :
    quantity:Volume.t ->
    Price.t ->
    ([< Order_action.t > `Sell ], [< Order_type.t > `Limit ]) Order.t
  val buy_market :
    quantity:Volume.t ->
    ([< Order_action.t > `Buy ], [< Order_type.t > `Market ]) Order.t
  val sell_market :
    quantity:Volume.t ->
    ([< Order_action.t > `Sell ], [< Order_type.t > `Market ]) Order.t
  val t_of_sexp :
    (Sexplib.Sexp.t -> ([< Order_action.t ] as 'a)) ->
    (Sexplib.Sexp.t -> ([< Order_type.t ] as 'b)) ->
    Sexplib.Sexp.t -> ('a, 'b) Order.t
  val sexp_of_t :
    (([< Order_action.t ] as 'a) -> Sexplib.Sexp.t) ->
    (([< Order_type.t ] as 'b) -> Sexplib.Sexp.t) ->
    ('a, 'b) Order.t -> Sexplib.Sexp.t
end