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