1    type List<T>
2        def (==) rhs =
3            if size <> rhs.size then
4                false
5            else
6                for i = 0 until size do
7                    if self[i] <> rhs[i] then return false
8    
9                true
10   
11       def contains x = as_slice.contains x
12       def first = self[0]
13       def last = self[size - 1]
14   
15       def try_last =
16           if size == 0
17           then None
18           else Some self[size - 1]
19   
20       def try_find_last (f : T -> bool) =
21           if is_empty then return None
22   
23           for i = size - 1 downto 0 do
24               let x = self[i]
25               if f x then
26                   return Some x
27   
28           None
29   
30       def find_last (f : T -> bool) = try_find_last f |> unwrap
31   
32   type List<T> where T : Comparable
33       def compare (other : List<T>) : Ordering =
34           let count = size.min other.size
35           for i = 0 until count do
36               let u = self[i]
37               let v = other[i]
38               if u > v then return Ordering/Greater
39               else if u < v then return Ordering/Less
40   
41           if size > other.size then Ordering/Greater
42           else if size < other.size then Ordering/Less
43           else Ordering/Equal
44   
45       is Compare
46   
47   type MutList<T>
48       def remove_last =
49           let last = self[size - 1]
50           remove_at (size - 1)
51           last
52   
53       def add_all<U> (items : U) where U : Iterable<T> =
54           for item in items do
55               add item
56