sig
  type ('a, +'storage) eref'
  type 'a eref = ('a, [ `Persistent | `Volatile ]) Eliom_reference.eref'
  exception Eref_not_initialized
  val eref :
    scope:[< Eliom_common.all_scope ] ->
    ?secure:bool -> ?persistent:string -> '-> 'Eliom_reference.eref
  val eref_from_fun :
    scope:[< Eliom_common.all_scope ] ->
    ?secure:bool ->
    ?persistent:string -> (unit -> 'a) -> 'Eliom_reference.eref
  val get : 'Eliom_reference.eref -> 'Lwt.t
  val set : 'Eliom_reference.eref -> '-> unit Lwt.t
  val modify : 'Eliom_reference.eref -> ('-> 'a) -> unit Lwt.t
  val unset : 'Eliom_reference.eref -> unit Lwt.t
  module Volatile :
    sig
      type 'a eref = ('a, [ `Volatile ]) Eliom_reference.eref'
      val eref :
        scope:[< Eliom_common.all_scope ] ->
        ?secure:bool -> '-> 'Eliom_reference.Volatile.eref
      val eref_from_fun :
        scope:[< Eliom_common.all_scope ] ->
        ?secure:bool -> (unit -> 'a) -> 'Eliom_reference.Volatile.eref
      val get : 'Eliom_reference.Volatile.eref -> 'a
      val set : 'Eliom_reference.Volatile.eref -> '-> unit
      val modify : 'Eliom_reference.Volatile.eref -> ('-> 'a) -> unit
      val unset : 'Eliom_reference.Volatile.eref -> unit
      module Ext :
        sig
          val get :
            ([< `Client_process | `Session | `Session_group ], [< `Data ])
            Eliom_state.Ext.state -> 'Eliom_reference.Volatile.eref -> 'a
          val set :
            ([< `Client_process | `Session | `Session_group ], [< `Data ])
            Eliom_state.Ext.state ->
            'Eliom_reference.Volatile.eref -> '-> unit
          val modify :
            ([< `Client_process | `Session | `Session_group ], [< `Data ])
            Eliom_state.Ext.state ->
            'Eliom_reference.Volatile.eref -> ('-> 'a) -> unit
          val unset :
            ([< `Client_process | `Session | `Session_group ], [< `Data ])
            Eliom_state.Ext.state -> 'Eliom_reference.Volatile.eref -> unit
        end
    end
  module Ext :
    sig
      val get :
        ([< `Client_process | `Session | `Session_group ],
         [< `Data | `Pers ])
        Eliom_state.Ext.state -> 'Eliom_reference.eref -> 'Lwt.t
      val set :
        ([< `Client_process | `Session | `Session_group ],
         [< `Data | `Pers ])
        Eliom_state.Ext.state -> 'Eliom_reference.eref -> '-> unit Lwt.t
      val modify :
        ([< `Client_process | `Session | `Session_group ],
         [< `Data | `Pers ])
        Eliom_state.Ext.state ->
        'Eliom_reference.eref -> ('-> 'a) -> unit Lwt.t
      val unset :
        ([< `Client_process | `Session | `Session_group ],
         [< `Data | `Pers ])
        Eliom_state.Ext.state -> 'Eliom_reference.eref -> unit Lwt.t
    end
end