sig
  module type S =
    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
end