1    type SliceIterator<T> =
2        inherit Iterator<T>
3    
4        let slice : Slice<T>
5        let mut index = -1
6    
7        def Iterator.move_next =
8            index += 1
9            index < slice.size
10   
11       def Iterator.get_value =
12           slice[index]
13   
14   type Slice<T>
15       def try_size = Some size |> as_option
16       def get_iterator = SliceIterator<T> self
17   
18       is Iterable<T>
19   
20   type Slice<T>
21       def take (x : u32) =
22           assert x <= size
23           Slice ptr x
24   
25       def drop self (x : u32) =
26           assert x <= self.size
27           let ptr = self.ptr + x
28           Slice ptr (self.size - x)
29   
30   type [T; N]
31       def get_iterator = as_slice.get_iterator
32