sig
  type _ field =
      Field :
        ('record, 'a) Variant_and_record_intf.M.Field.t -> 'record
                                                           Variant_and_record_intf.M.Record_internal.field
  type 'record fields = {
    get :
      'field. ('record, 'field) Variant_and_record_intf.M.Field.t -> 'field;
  }
  type 'a t = {
    typename : 'Typename.t;
    fields : 'Variant_and_record_intf.M.Record_internal.field array;
    has_double_array_tag : bool;
    create : 'Variant_and_record_intf.M.Record_internal.fields -> 'a;
  }
end