1    type SetIterator<T> =
2        inherit Iterator<T>
3    
4        let set : Set<T>
5        let version = set.version
6        let mut index = set.first
7        let mut is_started = false
8    
9        def Iterator.move_next =
10           assert set.version == version
11           if not is_started then
12               index = set.first
13               is_started = true
14           else if index <> -1 then
15               index = set.array[index].next
16   
17           index <> -1
18   
19       def Iterator.get_value =
20           assert set.version == version
21           set.array[index].key
22   
23   type Set<T>
24       def try_size = Some size |> as_option
25       def get_iterator = SetIterator<T> self
26   
27       is Iterable<T>
28