/
iterSig.ml
53 lines (40 loc) · 1.48 KB
/
iterSig.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
(*
Copyright © 2011 MLstate
This file is part of OPA.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*)
(**
Output signature of functors.
Taking an aggregate of 'a element (lists, set, map..) to give an iterator.
*)
module type S =
sig
(** The type of the aggregate of elements of type 'a*)
type +'a structure
(** The type of the elements of the aggregate*)
type +'a element
(** The type of the iterator*)
type 'a t
(** Create an iterator for the structure*)
val make : 'a structure -> 'a t
(** Taking an element of the iterator
@raise IteratorEnd if there are no more elements*)
val get : 'a t -> 'a element
(** The iterator, one step further
@raise IteratorEnd if there are no more elements*)
val next : 'a t -> 'a t
(* val prev : 'a t -> 'a t *)
(** True if this iterator has no more element
(get and next would raise IteartorEnd) *)
val at_end : 'a t -> bool
(** The number of remaining elements *)
val remaining : 'a t -> int
end