sig
  type direction_ = Left_Right | Right_Left
  type 'a t
  type 'a elt
  type 'a cursor
  type 'a collection
  type direction = direction_
  type 'a traversal =
      Traverse_All
    | Traverse_If of ('-> bool)
    | Traverse_While of ('-> bool)
  val create : direction -> 'a elt traversal -> 'a collection -> 'a t
  val from_cursor : direction -> 'a elt traversal -> 'a cursor -> 'a t
  val value : 'a t -> 'a elt option
  val get_value : 'a t -> 'a elt
  val at_end : 'a t -> bool
  val at_beg : 'a t -> bool
  val has_next : 'a t -> bool
  val next : 'a t -> 'a t
  val has_prev : 'a t -> bool
  val prev : 'a t -> 'a t
  val goto_beg : 'a t -> 'a t
  val goto_end : 'a t -> 'a t
  val flip : 'a t -> 'a t
  val iter : ('a elt -> unit) -> 'a t -> unit
  val fold : ('-> 'b elt -> 'a) -> '-> 'b t -> 'a
end