sig
  type 'a t
  val empty : 'a Reins.Lists.ListSig.t
  val is_empty : 'a Reins.Lists.ListSig.t -> bool
  val length : 'a Reins.Lists.ListSig.t -> int
  val rev : 'a Reins.Lists.ListSig.t -> 'a Reins.Lists.ListSig.t
  val cons : 'a -> 'a Reins.Lists.ListSig.t -> 'a Reins.Lists.ListSig.t
  val snoc : 'a -> 'a Reins.Lists.ListSig.t -> 'a Reins.Lists.ListSig.t
  val hd : 'a Reins.Lists.ListSig.t -> 'a
  val tl : 'a Reins.Lists.ListSig.t -> 'a Reins.Lists.ListSig.t
  val pop : 'a Reins.Lists.ListSig.t -> 'a * 'a Reins.Lists.ListSig.t
  val last : 'a Reins.Lists.ListSig.t -> 'a
  val append :
    'a Reins.Lists.ListSig.t ->
    'a Reins.Lists.ListSig.t -> 'a Reins.Lists.ListSig.t
  val flatten :
    'a Reins.Lists.ListSig.t Reins.Lists.ListSig.t ->
    'a Reins.Lists.ListSig.t
  val from_list : 'a list -> 'a Reins.Lists.ListSig.t
  val to_list : 'a Reins.Lists.ListSig.t -> 'a list
  val iter : ('a -> unit) -> 'a Reins.Lists.ListSig.t -> unit
  val fold : ('a -> 'b -> 'a) -> 'a -> 'b Reins.Lists.ListSig.t -> 'a
  val rev_map :
    ('a -> 'b) -> 'a Reins.Lists.ListSig.t -> 'b Reins.Lists.ListSig.t
  val map :
    ('a -> 'b) -> 'a Reins.Lists.ListSig.t -> 'b Reins.Lists.ListSig.t
  val to_string : ('a -> string) -> 'a Reins.Lists.ListSig.t -> string
  val compare :
    ('a -> 'a -> int) ->
    'a Reins.Lists.ListSig.t -> 'a Reins.Lists.ListSig.t -> int
  val gen :
    (?size:int -> Random.State.t -> 'a) ->
    ?size:int -> Random.State.t -> 'a Reins.Lists.ListSig.t
end