sig
  type ('a, 'b) t
  val empty : ('a, 'b) Seplist.t
  val cons_sep : 'a -> ('b, 'a) Seplist.t -> ('b, 'a) Seplist.t
  val cons_sep_alt : 'a -> ('b, 'a) Seplist.t -> ('b, 'a) Seplist.t
  val cons_entry : 'a -> ('a, 'b) Seplist.t -> ('a, 'b) Seplist.t
  val is_empty : ('a, 'b) Seplist.t -> bool
  val sing : 'a -> ('a, 'b) Seplist.t
  val hd : ('a, 'b) Seplist.t -> 'a
  val hd_sep : ('a, 'b) Seplist.t -> 'b
  val tl : ('a, 'b) Seplist.t -> ('a, 'b) Seplist.t
  val tl_alt : ('a, 'b) Seplist.t -> ('a, 'b) Seplist.t
  val tl_sep : ('a, 'b) Seplist.t -> ('a, 'b) Seplist.t
  val append :
    'a -> ('b, 'a) Seplist.t -> ('b, 'a) Seplist.t -> ('b, 'a) Seplist.t
  val flatten : 'a -> ('b, 'a) Seplist.t list -> ('b, 'a) Seplist.t
  val to_list : ('a, 'b) Seplist.t -> 'a list
  val to_pair_list : 'a -> ('b, 'a) Seplist.t -> 'a option * ('b * 'a) list
  val from_pair_list :
    'a option -> ('b * 'a) list -> 'b option -> ('b, 'a) Seplist.t
  val from_pair_list_sym :
    'a option -> ('b * 'a) list -> 'b option -> ('a, 'b) Seplist.t
  val drop_first_sep : ('a, 'b) Seplist.t -> 'b option * ('a, 'b) Seplist.t
  val to_sep_list : ('a -> 'b) -> ('c -> 'b) -> ('a, 'c) Seplist.t -> 'b list
  type ('a, 'b) optsep = Optional | Require of 'a | Forbid of ('a -> 'b)
  val to_sep_list_first :
    ('a, 'b) Seplist.optsep ->
    ('c -> 'b) -> ('a -> 'b) -> ('c, 'a) Seplist.t -> 'b list
  val to_sep_list_last :
    ('a, 'b) Seplist.optsep ->
    ('c -> 'b) -> ('a -> 'b) -> ('c, 'a) Seplist.t -> 'b list
  val to_list_map : ('a -> 'b) -> ('a, 'c) Seplist.t -> 'b list
  val iter : ('a -> unit) -> ('a, 'b) Seplist.t -> unit
  val from_list : ('a * 'b) list -> ('a, 'b) Seplist.t
  val from_list_prefix : 'a -> bool -> ('b * 'a) list -> ('b, 'a) Seplist.t
  val from_list_suffix : ('a * 'b) list -> 'b -> bool -> ('a, 'b) Seplist.t
  val from_list_default : 'a -> 'b list -> ('b, 'a) Seplist.t
  val length : ('a, 'b) Seplist.t -> int
  val map : ('a -> 'b) -> ('a, 'c) Seplist.t -> ('b, 'c) Seplist.t
  val map_changed :
    ('a -> 'a option) -> ('a, 'b) Seplist.t -> ('a, 'b) Seplist.t option
  val map_acc_right :
    ('a -> 'b -> 'c * 'b) ->
    'b -> ('a, 'd) Seplist.t -> ('c, 'd) Seplist.t * 'b
  val map_acc_left :
    ('a -> 'b -> 'c * 'b) ->
    'b -> ('a, 'd) Seplist.t -> ('c, 'd) Seplist.t * 'b
  val fold_right : ('a -> 'b -> 'b) -> 'b -> ('a, 'c) Seplist.t -> 'b
  val fold_left : ('a -> 'b -> 'b) -> 'b -> ('a, 'c) Seplist.t -> 'b
  val for_all : ('a -> bool) -> ('a, 'b) Seplist.t -> bool
  val exists : ('a -> bool) -> ('a, 'b) Seplist.t -> bool
  val find : 'a -> ('b -> bool) -> ('b, 'a) Seplist.t -> 'b * 'a
  val pp :
    (Format.formatter -> 'a -> unit) ->
    (Format.formatter -> 'b -> unit) ->
    Format.formatter -> ('a, 'b) Seplist.t -> unit
  val replace_all_seps :
    ('a -> 'a) -> ('b, 'a) Seplist.t -> ('b, 'a) Seplist.t
end