sig
  val names : string list
  val combo_legs :
    ([< `Read | `Set_and_create ], Raw_contract.t, int)
    Fieldslib.Field.t_with_perm
  val sec_id :
    ([< `Read | `Set_and_create ], Raw_contract.t, Security_id.Id.t option)
    Fieldslib.Field.t_with_perm
  val sec_id_type :
    ([< `Read | `Set_and_create ], Raw_contract.t, Security_id.Type.t option)
    Fieldslib.Field.t_with_perm
  val include_expired :
    ([< `Read | `Set_and_create ], Raw_contract.t, bool)
    Fieldslib.Field.t_with_perm
  val local_symbol :
    ([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t option)
    Fieldslib.Field.t_with_perm
  val currency :
    ([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
    Fieldslib.Field.t_with_perm
  val listing_exchange :
    ([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t option)
    Fieldslib.Field.t_with_perm
  val exchange :
    ([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
    Fieldslib.Field.t_with_perm
  val multiplier :
    ([< `Read | `Set_and_create ], Raw_contract.t, int option)
    Fieldslib.Field.t_with_perm
  val option_right :
    ([< `Read | `Set_and_create ], Raw_contract.t, Option_right.t option)
    Fieldslib.Field.t_with_perm
  val strike :
    ([< `Read | `Set_and_create ], Raw_contract.t, Price.t option)
    Fieldslib.Field.t_with_perm
  val expiry :
    ([< `Read | `Set_and_create ], Raw_contract.t, Core.Std.Date.t option)
    Fieldslib.Field.t_with_perm
  val sec_type :
    ([< `Read | `Set_and_create ], Raw_contract.t, string)
    Fieldslib.Field.t_with_perm
  val symbol :
    ([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
    Fieldslib.Field.t_with_perm
  val con_id :
    ([< `Read | `Set_and_create ], Raw_contract.t, Contract_id.t option)
    Fieldslib.Field.t_with_perm
  val make_creator :
    con_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Contract_id.t option)
            Fieldslib.Field.t_with_perm ->
            'a -> ('b -> Contract_id.t option) * 'c) ->
    symbol:(([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
            Fieldslib.Field.t_with_perm -> 'c -> ('b -> Symbol.t) * 'd) ->
    sec_type:(([< `Read | `Set_and_create ], Raw_contract.t, string)
              Fieldslib.Field.t_with_perm -> 'd -> ('b -> string) * 'e) ->
    expiry:(([< `Read | `Set_and_create ], Raw_contract.t,
             Core.Std.Date.t option)
            Fieldslib.Field.t_with_perm ->
            'e -> ('b -> Core.Std.Date.t option) * 'f) ->
    strike:(([< `Read | `Set_and_create ], Raw_contract.t, Price.t option)
            Fieldslib.Field.t_with_perm -> 'f -> ('b -> Price.t option) * 'g) ->
    option_right:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Option_right.t option)
                  Fieldslib.Field.t_with_perm ->
                  'g -> ('b -> Option_right.t option) * 'h) ->
    multiplier:(([< `Read | `Set_and_create ], Raw_contract.t, int option)
                Fieldslib.Field.t_with_perm -> 'h -> ('b -> int option) * 'i) ->
    exchange:(([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
              Fieldslib.Field.t_with_perm -> 'i -> ('b -> Exchange.t) * 'j) ->
    listing_exchange:(([< `Read | `Set_and_create ], Raw_contract.t,
                       Exchange.t option)
                      Fieldslib.Field.t_with_perm ->
                      'j -> ('b -> Exchange.t option) * 'k) ->
    currency:(([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
              Fieldslib.Field.t_with_perm -> 'k -> ('b -> Currency.t) * 'l) ->
    local_symbol:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Symbol.t option)
                  Fieldslib.Field.t_with_perm ->
                  'l -> ('b -> Symbol.t option) * 'm) ->
    include_expired:(([< `Read | `Set_and_create ], Raw_contract.t, bool)
                     Fieldslib.Field.t_with_perm -> 'm -> ('b -> bool) * 'n) ->
    sec_id_type:(([< `Read | `Set_and_create ], Raw_contract.t,
                  Security_id.Type.t option)
                 Fieldslib.Field.t_with_perm ->
                 'n -> ('b -> Security_id.Type.t option) * 'o) ->
    sec_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Security_id.Id.t option)
            Fieldslib.Field.t_with_perm ->
            'o -> ('b -> Security_id.Id.t option) * 'p) ->
    combo_legs:(([< `Read | `Set_and_create ], Raw_contract.t, int)
                Fieldslib.Field.t_with_perm -> 'p -> ('b -> int) * 'q) ->
    'a -> ('b -> Raw_contract.t) * 'q
  val create :
    con_id:Contract_id.t option ->
    symbol:Symbol.t ->
    sec_type:string ->
    expiry:Core.Std.Date.t option ->
    strike:Price.t option ->
    option_right:Option_right.t option ->
    multiplier:int option ->
    exchange:Exchange.t ->
    listing_exchange:Exchange.t option ->
    currency:Currency.t ->
    local_symbol:Symbol.t option ->
    include_expired:bool ->
    sec_id_type:Security_id.Type.t option ->
    sec_id:Security_id.Id.t option -> combo_legs:int -> Raw_contract.t
  val map :
    con_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Contract_id.t option)
            Fieldslib.Field.t_with_perm -> Contract_id.t option) ->
    symbol:(([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
            Fieldslib.Field.t_with_perm -> Symbol.t) ->
    sec_type:(([< `Read | `Set_and_create ], Raw_contract.t, string)
              Fieldslib.Field.t_with_perm -> string) ->
    expiry:(([< `Read | `Set_and_create ], Raw_contract.t,
             Core.Std.Date.t option)
            Fieldslib.Field.t_with_perm -> Core.Std.Date.t option) ->
    strike:(([< `Read | `Set_and_create ], Raw_contract.t, Price.t option)
            Fieldslib.Field.t_with_perm -> Price.t option) ->
    option_right:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Option_right.t option)
                  Fieldslib.Field.t_with_perm -> Option_right.t option) ->
    multiplier:(([< `Read | `Set_and_create ], Raw_contract.t, int option)
                Fieldslib.Field.t_with_perm -> int option) ->
    exchange:(([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
              Fieldslib.Field.t_with_perm -> Exchange.t) ->
    listing_exchange:(([< `Read | `Set_and_create ], Raw_contract.t,
                       Exchange.t option)
                      Fieldslib.Field.t_with_perm -> Exchange.t option) ->
    currency:(([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
              Fieldslib.Field.t_with_perm -> Currency.t) ->
    local_symbol:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Symbol.t option)
                  Fieldslib.Field.t_with_perm -> Symbol.t option) ->
    include_expired:(([< `Read | `Set_and_create ], Raw_contract.t, bool)
                     Fieldslib.Field.t_with_perm -> bool) ->
    sec_id_type:(([< `Read | `Set_and_create ], Raw_contract.t,
                  Security_id.Type.t option)
                 Fieldslib.Field.t_with_perm -> Security_id.Type.t option) ->
    sec_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Security_id.Id.t option)
            Fieldslib.Field.t_with_perm -> Security_id.Id.t option) ->
    combo_legs:(([< `Read | `Set_and_create ], Raw_contract.t, int)
                Fieldslib.Field.t_with_perm -> int) ->
    Raw_contract.t
  val iter :
    con_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Contract_id.t option)
            Fieldslib.Field.t_with_perm -> 'a) ->
    symbol:(([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
            Fieldslib.Field.t_with_perm -> 'b) ->
    sec_type:(([< `Read | `Set_and_create ], Raw_contract.t, string)
              Fieldslib.Field.t_with_perm -> 'c) ->
    expiry:(([< `Read | `Set_and_create ], Raw_contract.t,
             Core.Std.Date.t option)
            Fieldslib.Field.t_with_perm -> 'd) ->
    strike:(([< `Read | `Set_and_create ], Raw_contract.t, Price.t option)
            Fieldslib.Field.t_with_perm -> 'e) ->
    option_right:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Option_right.t option)
                  Fieldslib.Field.t_with_perm -> 'f) ->
    multiplier:(([< `Read | `Set_and_create ], Raw_contract.t, int option)
                Fieldslib.Field.t_with_perm -> 'g) ->
    exchange:(([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
              Fieldslib.Field.t_with_perm -> 'h) ->
    listing_exchange:(([< `Read | `Set_and_create ], Raw_contract.t,
                       Exchange.t option)
                      Fieldslib.Field.t_with_perm -> 'i) ->
    currency:(([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
              Fieldslib.Field.t_with_perm -> 'j) ->
    local_symbol:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Symbol.t option)
                  Fieldslib.Field.t_with_perm -> 'k) ->
    include_expired:(([< `Read | `Set_and_create ], Raw_contract.t, bool)
                     Fieldslib.Field.t_with_perm -> 'l) ->
    sec_id_type:(([< `Read | `Set_and_create ], Raw_contract.t,
                  Security_id.Type.t option)
                 Fieldslib.Field.t_with_perm -> 'm) ->
    sec_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Security_id.Id.t option)
            Fieldslib.Field.t_with_perm -> 'n) ->
    combo_legs:(([< `Read | `Set_and_create ], Raw_contract.t, int)
                Fieldslib.Field.t_with_perm -> 'o) ->
    'o
  val fold :
    init:'a ->
    con_id:('a ->
            ([< `Read | `Set_and_create ], Raw_contract.t,
             Contract_id.t option)
            Fieldslib.Field.t_with_perm -> 'b) ->
    symbol:('b ->
            ([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
            Fieldslib.Field.t_with_perm -> 'c) ->
    sec_type:('c ->
              ([< `Read | `Set_and_create ], Raw_contract.t, string)
              Fieldslib.Field.t_with_perm -> 'd) ->
    expiry:('d ->
            ([< `Read | `Set_and_create ], Raw_contract.t,
             Core.Std.Date.t option)
            Fieldslib.Field.t_with_perm -> 'e) ->
    strike:('e ->
            ([< `Read | `Set_and_create ], Raw_contract.t, Price.t option)
            Fieldslib.Field.t_with_perm -> 'f) ->
    option_right:('f ->
                  ([< `Read | `Set_and_create ], Raw_contract.t,
                   Option_right.t option)
                  Fieldslib.Field.t_with_perm -> 'g) ->
    multiplier:('g ->
                ([< `Read | `Set_and_create ], Raw_contract.t, int option)
                Fieldslib.Field.t_with_perm -> 'h) ->
    exchange:('h ->
              ([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
              Fieldslib.Field.t_with_perm -> 'i) ->
    listing_exchange:('i ->
                      ([< `Read | `Set_and_create ], Raw_contract.t,
                       Exchange.t option)
                      Fieldslib.Field.t_with_perm -> 'j) ->
    currency:('j ->
              ([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
              Fieldslib.Field.t_with_perm -> 'k) ->
    local_symbol:('k ->
                  ([< `Read | `Set_and_create ], Raw_contract.t,
                   Symbol.t option)
                  Fieldslib.Field.t_with_perm -> 'l) ->
    include_expired:('l ->
                     ([< `Read | `Set_and_create ], Raw_contract.t, bool)
                     Fieldslib.Field.t_with_perm -> 'm) ->
    sec_id_type:('m ->
                 ([< `Read | `Set_and_create ], Raw_contract.t,
                  Security_id.Type.t option)
                 Fieldslib.Field.t_with_perm -> 'n) ->
    sec_id:('n ->
            ([< `Read | `Set_and_create ], Raw_contract.t,
             Security_id.Id.t option)
            Fieldslib.Field.t_with_perm -> 'o) ->
    combo_legs:('o ->
                ([< `Read | `Set_and_create ], Raw_contract.t, int)
                Fieldslib.Field.t_with_perm -> 'p) ->
    'p
  val map_poly :
    ([< `Read | `Set_and_create ], Raw_contract.t, 'a) Fieldslib.Field.user ->
    'a list
  val for_all :
    con_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Contract_id.t option)
            Fieldslib.Field.t_with_perm -> bool) ->
    symbol:(([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
            Fieldslib.Field.t_with_perm -> bool) ->
    sec_type:(([< `Read | `Set_and_create ], Raw_contract.t, string)
              Fieldslib.Field.t_with_perm -> bool) ->
    expiry:(([< `Read | `Set_and_create ], Raw_contract.t,
             Core.Std.Date.t option)
            Fieldslib.Field.t_with_perm -> bool) ->
    strike:(([< `Read | `Set_and_create ], Raw_contract.t, Price.t option)
            Fieldslib.Field.t_with_perm -> bool) ->
    option_right:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Option_right.t option)
                  Fieldslib.Field.t_with_perm -> bool) ->
    multiplier:(([< `Read | `Set_and_create ], Raw_contract.t, int option)
                Fieldslib.Field.t_with_perm -> bool) ->
    exchange:(([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
              Fieldslib.Field.t_with_perm -> bool) ->
    listing_exchange:(([< `Read | `Set_and_create ], Raw_contract.t,
                       Exchange.t option)
                      Fieldslib.Field.t_with_perm -> bool) ->
    currency:(([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
              Fieldslib.Field.t_with_perm -> bool) ->
    local_symbol:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Symbol.t option)
                  Fieldslib.Field.t_with_perm -> bool) ->
    include_expired:(([< `Read | `Set_and_create ], Raw_contract.t, bool)
                     Fieldslib.Field.t_with_perm -> bool) ->
    sec_id_type:(([< `Read | `Set_and_create ], Raw_contract.t,
                  Security_id.Type.t option)
                 Fieldslib.Field.t_with_perm -> bool) ->
    sec_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Security_id.Id.t option)
            Fieldslib.Field.t_with_perm -> bool) ->
    combo_legs:(([< `Read | `Set_and_create ], Raw_contract.t, int)
                Fieldslib.Field.t_with_perm -> bool) ->
    bool
  val exists :
    con_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Contract_id.t option)
            Fieldslib.Field.t_with_perm -> bool) ->
    symbol:(([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
            Fieldslib.Field.t_with_perm -> bool) ->
    sec_type:(([< `Read | `Set_and_create ], Raw_contract.t, string)
              Fieldslib.Field.t_with_perm -> bool) ->
    expiry:(([< `Read | `Set_and_create ], Raw_contract.t,
             Core.Std.Date.t option)
            Fieldslib.Field.t_with_perm -> bool) ->
    strike:(([< `Read | `Set_and_create ], Raw_contract.t, Price.t option)
            Fieldslib.Field.t_with_perm -> bool) ->
    option_right:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Option_right.t option)
                  Fieldslib.Field.t_with_perm -> bool) ->
    multiplier:(([< `Read | `Set_and_create ], Raw_contract.t, int option)
                Fieldslib.Field.t_with_perm -> bool) ->
    exchange:(([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
              Fieldslib.Field.t_with_perm -> bool) ->
    listing_exchange:(([< `Read | `Set_and_create ], Raw_contract.t,
                       Exchange.t option)
                      Fieldslib.Field.t_with_perm -> bool) ->
    currency:(([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
              Fieldslib.Field.t_with_perm -> bool) ->
    local_symbol:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Symbol.t option)
                  Fieldslib.Field.t_with_perm -> bool) ->
    include_expired:(([< `Read | `Set_and_create ], Raw_contract.t, bool)
                     Fieldslib.Field.t_with_perm -> bool) ->
    sec_id_type:(([< `Read | `Set_and_create ], Raw_contract.t,
                  Security_id.Type.t option)
                 Fieldslib.Field.t_with_perm -> bool) ->
    sec_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Security_id.Id.t option)
            Fieldslib.Field.t_with_perm -> bool) ->
    combo_legs:(([< `Read | `Set_and_create ], Raw_contract.t, int)
                Fieldslib.Field.t_with_perm -> bool) ->
    bool
  val to_list :
    con_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Contract_id.t option)
            Fieldslib.Field.t_with_perm -> 'a) ->
    symbol:(([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
            Fieldslib.Field.t_with_perm -> 'a) ->
    sec_type:(([< `Read | `Set_and_create ], Raw_contract.t, string)
              Fieldslib.Field.t_with_perm -> 'a) ->
    expiry:(([< `Read | `Set_and_create ], Raw_contract.t,
             Core.Std.Date.t option)
            Fieldslib.Field.t_with_perm -> 'a) ->
    strike:(([< `Read | `Set_and_create ], Raw_contract.t, Price.t option)
            Fieldslib.Field.t_with_perm -> 'a) ->
    option_right:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Option_right.t option)
                  Fieldslib.Field.t_with_perm -> 'a) ->
    multiplier:(([< `Read | `Set_and_create ], Raw_contract.t, int option)
                Fieldslib.Field.t_with_perm -> 'a) ->
    exchange:(([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
              Fieldslib.Field.t_with_perm -> 'a) ->
    listing_exchange:(([< `Read | `Set_and_create ], Raw_contract.t,
                       Exchange.t option)
                      Fieldslib.Field.t_with_perm -> 'a) ->
    currency:(([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
              Fieldslib.Field.t_with_perm -> 'a) ->
    local_symbol:(([< `Read | `Set_and_create ], Raw_contract.t,
                   Symbol.t option)
                  Fieldslib.Field.t_with_perm -> 'a) ->
    include_expired:(([< `Read | `Set_and_create ], Raw_contract.t, bool)
                     Fieldslib.Field.t_with_perm -> 'a) ->
    sec_id_type:(([< `Read | `Set_and_create ], Raw_contract.t,
                  Security_id.Type.t option)
                 Fieldslib.Field.t_with_perm -> 'a) ->
    sec_id:(([< `Read | `Set_and_create ], Raw_contract.t,
             Security_id.Id.t option)
            Fieldslib.Field.t_with_perm -> 'a) ->
    combo_legs:(([< `Read | `Set_and_create ], Raw_contract.t, int)
                Fieldslib.Field.t_with_perm -> 'a) ->
    'a list
  module Direct :
    sig
      val iter :
        Raw_contract.t ->
        con_id:(([< `Read | `Set_and_create ], Raw_contract.t,
                 Contract_id.t option)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Contract_id.t option -> 'a) ->
        symbol:(([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Symbol.t -> 'b) ->
        sec_type:(([< `Read | `Set_and_create ], Raw_contract.t, string)
                  Fieldslib.Field.t_with_perm ->
                  Raw_contract.t -> string -> 'c) ->
        expiry:(([< `Read | `Set_and_create ], Raw_contract.t,
                 Core.Std.Date.t option)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Core.Std.Date.t option -> 'd) ->
        strike:(([< `Read | `Set_and_create ], Raw_contract.t,
                 Price.t option)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Price.t option -> 'e) ->
        option_right:(([< `Read | `Set_and_create ], Raw_contract.t,
                       Option_right.t option)
                      Fieldslib.Field.t_with_perm ->
                      Raw_contract.t -> Option_right.t option -> 'f) ->
        multiplier:(([< `Read | `Set_and_create ], Raw_contract.t,
                     int option)
                    Fieldslib.Field.t_with_perm ->
                    Raw_contract.t -> int option -> 'g) ->
        exchange:(([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_contract.t -> Exchange.t -> 'h) ->
        listing_exchange:(([< `Read | `Set_and_create ], Raw_contract.t,
                           Exchange.t option)
                          Fieldslib.Field.t_with_perm ->
                          Raw_contract.t -> Exchange.t option -> 'i) ->
        currency:(([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_contract.t -> Currency.t -> 'j) ->
        local_symbol:(([< `Read | `Set_and_create ], Raw_contract.t,
                       Symbol.t option)
                      Fieldslib.Field.t_with_perm ->
                      Raw_contract.t -> Symbol.t option -> 'k) ->
        include_expired:(([< `Read | `Set_and_create ], Raw_contract.t, bool)
                         Fieldslib.Field.t_with_perm ->
                         Raw_contract.t -> bool -> 'l) ->
        sec_id_type:(([< `Read | `Set_and_create ], Raw_contract.t,
                      Security_id.Type.t option)
                     Fieldslib.Field.t_with_perm ->
                     Raw_contract.t -> Security_id.Type.t option -> 'm) ->
        sec_id:(([< `Read | `Set_and_create ], Raw_contract.t,
                 Security_id.Id.t option)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Security_id.Id.t option -> 'n) ->
        combo_legs:(([< `Read | `Set_and_create ], Raw_contract.t, int)
                    Fieldslib.Field.t_with_perm ->
                    Raw_contract.t -> int -> 'o) ->
        'o
      val fold :
        Raw_contract.t ->
        init:'a ->
        con_id:('a ->
                ([< `Read | `Set_and_create ], Raw_contract.t,
                 Contract_id.t option)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Contract_id.t option -> 'b) ->
        symbol:('b ->
                ([< `Read | `Set_and_create ], Raw_contract.t, Symbol.t)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Symbol.t -> 'c) ->
        sec_type:('c ->
                  ([< `Read | `Set_and_create ], Raw_contract.t, string)
                  Fieldslib.Field.t_with_perm ->
                  Raw_contract.t -> string -> 'd) ->
        expiry:('d ->
                ([< `Read | `Set_and_create ], Raw_contract.t,
                 Core.Std.Date.t option)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Core.Std.Date.t option -> 'e) ->
        strike:('e ->
                ([< `Read | `Set_and_create ], Raw_contract.t,
                 Price.t option)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Price.t option -> 'f) ->
        option_right:('f ->
                      ([< `Read | `Set_and_create ], Raw_contract.t,
                       Option_right.t option)
                      Fieldslib.Field.t_with_perm ->
                      Raw_contract.t -> Option_right.t option -> 'g) ->
        multiplier:('g ->
                    ([< `Read | `Set_and_create ], Raw_contract.t,
                     int option)
                    Fieldslib.Field.t_with_perm ->
                    Raw_contract.t -> int option -> 'h) ->
        exchange:('h ->
                  ([< `Read | `Set_and_create ], Raw_contract.t, Exchange.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_contract.t -> Exchange.t -> 'i) ->
        listing_exchange:('i ->
                          ([< `Read | `Set_and_create ], Raw_contract.t,
                           Exchange.t option)
                          Fieldslib.Field.t_with_perm ->
                          Raw_contract.t -> Exchange.t option -> 'j) ->
        currency:('j ->
                  ([< `Read | `Set_and_create ], Raw_contract.t, Currency.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_contract.t -> Currency.t -> 'k) ->
        local_symbol:('k ->
                      ([< `Read | `Set_and_create ], Raw_contract.t,
                       Symbol.t option)
                      Fieldslib.Field.t_with_perm ->
                      Raw_contract.t -> Symbol.t option -> 'l) ->
        include_expired:('l ->
                         ([< `Read | `Set_and_create ], Raw_contract.t, bool)
                         Fieldslib.Field.t_with_perm ->
                         Raw_contract.t -> bool -> 'm) ->
        sec_id_type:('m ->
                     ([< `Read | `Set_and_create ], Raw_contract.t,
                      Security_id.Type.t option)
                     Fieldslib.Field.t_with_perm ->
                     Raw_contract.t -> Security_id.Type.t option -> 'n) ->
        sec_id:('n ->
                ([< `Read | `Set_and_create ], Raw_contract.t,
                 Security_id.Id.t option)
                Fieldslib.Field.t_with_perm ->
                Raw_contract.t -> Security_id.Id.t option -> 'o) ->
        combo_legs:('o ->
                    ([< `Read | `Set_and_create ], Raw_contract.t, int)
                    Fieldslib.Field.t_with_perm ->
                    Raw_contract.t -> int -> 'p) ->
        'p
    end
end