sig
  type ('a, 'b) t = { get : '-> 'b; set : '-> '-> 'a; }
  val modify : ('a, 'b) GapiLens.t -> ('-> 'b) -> '-> 'a
  val compose :
    ('a, 'b) GapiLens.t -> ('c, 'a) GapiLens.t -> ('c, 'b) GapiLens.t
  val pair :
    ('a, 'b) GapiLens.t ->
    ('c, 'd) GapiLens.t -> ('a * 'c, 'b * 'd) GapiLens.t
  val cond :
    ('-> bool) ->
    ('a, 'b) GapiLens.t -> ('a, 'b) GapiLens.t -> ('a, 'b) GapiLens.t
  val get_state : ('a, 'b) GapiLens.t -> '-> 'b * 'a
  val put_state : ('a, 'b) GapiLens.t -> '-> '-> unit * 'a
  val modify_state : ('a, 'b) GapiLens.t -> ('-> 'b) -> '-> unit * 'a
  val ignore : ('a, unit) GapiLens.t
  val id : ('a, 'a) GapiLens.t
  val first : ('a * 'b, 'a) GapiLens.t
  val second : ('a * 'b, 'b) GapiLens.t
  val head : ('a list, 'a) GapiLens.t
  val tail : ('a list, 'a list) GapiLens.t
  val for_hash : '-> (('a, 'b) Hashtbl.t, 'b option) GapiLens.t
  val for_assoc : '-> (('a * 'b) list, 'b option) GapiLens.t
  val for_array : int -> ('a array, 'a) GapiLens.t
  val for_list : int -> ('a list, 'a) GapiLens.t
  val option_get : ('a option, 'a) GapiLens.t
  val list_map : ('a, 'b) GapiLens.t -> ('a list, 'b list) GapiLens.t
  val xmap :
    ('-> 'b) -> ('-> 'a) -> ('c, 'a) GapiLens.t -> ('c, 'b) GapiLens.t
  module Infix :
    sig
      val ( |. ) : '-> ('a, 'b) GapiLens.t -> 'b
      val ( ^= ) : ('a, 'b) GapiLens.t -> '-> '-> 'a
      val ( ^%= ) : ('a, 'b) GapiLens.t -> ('-> 'b) -> '-> 'a
      val ( |-- ) :
        ('a, 'b) GapiLens.t -> ('b, 'c) GapiLens.t -> ('a, 'c) GapiLens.t
      val ( --| ) :
        ('a, 'b) GapiLens.t -> ('c, 'a) GapiLens.t -> ('c, 'b) GapiLens.t
      val ( *** ) :
        ('a, 'b) GapiLens.t ->
        ('c, 'd) GapiLens.t -> ('a * 'c, 'b * 'd) GapiLens.t
      val ( += ) : ('a, int) GapiLens.t -> int -> '-> 'a
      val ( -= ) : ('a, int) GapiLens.t -> int -> '-> 'a
    end
  module StateInfix :
    sig
      val ( ^=! ) : ('a, 'b) GapiLens.t -> '-> '-> unit * 'a
      val ( +=! ) : ('a, int) GapiLens.t -> int -> '-> unit * 'a
      val ( -=! ) : ('a, int) GapiLens.t -> int -> '-> unit * 'a
      val ( @=! ) : ('a, 'b list) GapiLens.t -> 'b list -> '-> unit * 'a
    end
end