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