Module Kot.Buffer3

type 'a buffer =
  1. | B0
  2. | B1 of 'a
  3. | B2 of 'a * 'a
  4. | B3 of 'a * 'a * 'a
val empty : 'a buffer
val length : 'a buffer -> int
val is_empty : 'a buffer -> bool
val push : 'a -> 'a buffer -> 'a buffer
val pop : 'a buffer -> 'a * 'a buffer
val first : 'a buffer -> 'a

first b returns the first element of the buffer b, which must be nonempty. It is equivalent to fst (pop b).

val inject : 'a buffer -> 'a -> 'a buffer
val eject : 'a buffer -> 'a buffer * 'a
val last : 'a buffer -> 'a

last b returns the last element of the buffer b, which must be nonempty. It is equivalent to snd (eject b).

val map : ('a -> 'b) -> 'a buffer -> 'b buffer
val fold_left : ('b -> 'a -> 'b) -> 'b -> 'a buffer -> 'b
val fold_right : ('a -> 'b -> 'b) -> 'a buffer -> 'b -> 'b
val pop2 : 'a buffer -> 'a * 'a * 'a buffer
val eject2 : 'a buffer -> 'a buffer * 'a * 'a