sig
  module For_generated_code :
    sig
      type ('perm, 'record, 'field) t = {
        force_variance : 'perm -> unit;
        name : string;
        setter : ('record -> 'field -> unit) option;
        getter : 'record -> 'field;
        fset : 'record -> 'field -> 'record;
      }
    end
  type ('perm, 'record, 'field) t_with_perm =
      Field of ('perm, 'record, 'field) Field.For_generated_code.t
  type ('record, 'field) t =
      ([ `Read | `Set_and_create ], 'record, 'field) Field.t_with_perm
  type ('record, 'field) readonly_t =
      ([ `Read ], 'record, 'field) Field.t_with_perm
  val name : ('a, 'b, 'c) Field.t_with_perm -> string
  val get : ('b, 'r, 'a) Field.t_with_perm -> '-> 'a
  val fset :
    ([> `Set_and_create ], 'r, 'a) Field.t_with_perm -> '-> '-> 'r
  val setter :
    ([> `Set_and_create ], 'r, 'a) Field.t_with_perm ->
    ('-> '-> unit) option
  type ('perm, 'record, 'result) user = {
    f : 'field. ('perm, 'record, 'field) Field.t_with_perm -> 'result;
  }
end