sig
type 'a t
exception No_more
val create : 'a -> 'a Shistory.t
val push : 'a -> 'a Shistory.t -> 'a Shistory.t
val get : 'a Shistory.t -> 'a
val undo : 'a Shistory.t -> 'a * 'a Shistory.t
val redo : 'a Shistory.t -> 'a * 'a Shistory.t
val can_redo : 'a Shistory.t -> bool
val as_list : 'a Shistory.t -> 'a list
type 'a imp_t
val imp_create : 'a -> 'a Shistory.imp_t
val imp_push : 'a -> 'a Shistory.imp_t -> unit
val imp_get : 'a Shistory.imp_t -> 'a
val imp_undo : 'a Shistory.imp_t -> 'a
val imp_redo : 'a Shistory.imp_t -> 'a
val imp_can_redo : 'a Shistory.imp_t -> bool
val imp_as_list : 'a Shistory.imp_t -> 'a list
val imp_to_t : 'a Shistory.imp_t -> 'a Shistory.t
val t_to_imp : 'a Shistory.t -> 'a Shistory.imp_t
end