Module Seplist


module Seplist: sig .. end
general thing of lists with optional separators

type ('a, 'b) t 
val empty : ('a, 'b) t
val cons_sep : 'a -> ('b, 'a) t -> ('b, 'a) t
val cons_sep_alt : 'a -> ('b, 'a) t -> ('b, 'a) t
cons_sep_alt doesn't add the separator if the list is empty
val cons_entry : 'a -> ('a, 'b) t -> ('a, 'b) t
val is_empty : ('a, 'b) t -> bool
val sing : 'a -> ('a, 'b) t
sing a constructs a seplist with entry a. It does the same as cons_entry a empty.
val hd : ('a, 'b) t -> 'a
gets the first entry, if there is one
val hd_sep : ('a, 'b) t -> 'b
gets the first seperator, if there is one
val tl : ('a, 'b) t -> ('a, 'b) t
Removes the first entry, fails is there is none, or if a separator is first
val tl_alt : ('a, 'b) t -> ('a, 'b) t
Removes the first entry, fails is there is none, removes any separator that precedes the first entry
val tl_sep : ('a, 'b) t -> ('a, 'b) t
Removes the first separator, fails is there is none, or if an entry is first
val append : 'a -> ('b, 'a) t -> ('b, 'a) t -> ('b, 'a) t
append d sl1 sl2 appends the seplists sl1 and sl2. If sl1 ends with a value and sl2 starts with a value, a default separator s is added. If sl1 ends with a separator and sl2 starts with a separator, the seperator of sl2 is dropped.
val flatten : 'a -> ('b, 'a) t list -> ('b, 'a) t
flatten d sll flattens a list of seplists by applying append repeatedly
val to_list : ('a, 'b) t -> 'a list
Makes a normal list, ignoring separators
val to_pair_list : 'a -> ('b, 'a) t -> 'a option * ('b * 'a) list
Makes a normal list of pairs. The first separator is returned separately, an default one added for the last entry, if the lists ends with a value
val from_pair_list : 'a option -> ('b * 'a) list -> 'b option -> ('b, 'a) t
constructs a seplist from a list of pairs. In contrast to from_list, the last separator is kept
val from_pair_list_sym : 'a option -> ('b * 'a) list -> 'b option -> ('a, 'b) t
from_pair_list_sym first_val_opt sep_val_list last_sep_opt constructs a seplist from a list of pairs sep_val_list. In contrast to from_pair_list, the separator is the first component of these pairs. This also means that we now need an optional first value before the list and an optional last separator after the list, whereas from_pair_list has an optional first separator and last value.
val drop_first_sep : ('a, 'b) t -> 'b option * ('a, 'b) t
If sl starts with a seperator, it is dropped and returned, otherwise nothing happens.
val to_sep_list : ('a -> 'b) -> ('c -> 'b) -> ('a, 'c) t -> 'b list
Flattens into a normal list with separators and elements intermixed

type ('a, 'b) optsep =
| Optional
| Require of 'a
| Forbid of ('a -> 'b)
val to_sep_list_first : ('a, 'b) optsep ->
('c -> 'b) -> ('a -> 'b) -> ('c, 'a) t -> 'b list
Flattens into a normal list with separators and elements intermixed, with special control over the first separator. Optional indicates no special treatment (works as to_sep_list), Require adds the given initial separator if there is none, and Forbid removes the initial separator if there is one. In the latter case, the initial separator is processed by the function argument to Forbid
val to_sep_list_last : ('a, 'b) optsep ->
('c -> 'b) -> ('a -> 'b) -> ('c, 'a) t -> 'b list
As to_sep_list_first, but for the last separator
val to_list_map : ('a -> 'b) -> ('a, 'c) t -> 'b list
val iter : ('a -> unit) -> ('a, 'b) t -> unit
val from_list : ('a * 'b) list -> ('a, 'b) t
The from list functions ignore the last separator in the input list
val from_list_prefix : 'a -> bool -> ('b * 'a) list -> ('b, 'a) t
val from_list_suffix : ('a * 'b) list -> 'b -> bool -> ('a, 'b) t
val from_list_default : 'a -> 'b list -> ('b, 'a) t
from_list_default d l constructs a seplist form a list of entries l using the separator d as default separator between all entries.
val length : ('a, 'b) t -> int
val map : ('a -> 'b) -> ('a, 'c) t -> ('b, 'c) t
val map_changed : ('a -> 'a option) -> ('a, 'b) t -> ('a, 'b) t option
Returns None if the function returns None on all of the elements, otherwise returns a list that uses the original element where the function returns None
val map_acc_right : ('a -> 'b -> 'c * 'b) -> 'b -> ('a, 'd) t -> ('c, 'd) t * 'b
Maps with an accumulating parameter. The _right version builds the accumulator right-to-left, and the _left version builds it left-to-right.
val map_acc_left : ('a -> 'b -> 'c * 'b) -> 'b -> ('a, 'd) t -> ('c, 'd) t * 'b
val fold_right : ('a -> 'b -> 'b) -> 'b -> ('a, 'c) t -> 'b
fold right implemented via map_acc_right
val fold_left : ('a -> 'b -> 'b) -> 'b -> ('a, 'c) t -> 'b
fold left implemented via map_acc_left
val for_all : ('a -> bool) -> ('a, 'b) t -> bool
val exists : ('a -> bool) -> ('a, 'b) t -> bool
val find : 'a -> ('b -> bool) -> ('b, 'a) t -> 'b * 'a
val pp : (Format.formatter -> 'a -> unit) ->
(Format.formatter -> 'b -> unit) ->
Format.formatter -> ('a, 'b) t -> unit
val replace_all_seps : ('a -> 'a) -> ('b, 'a) t -> ('b, 'a) t