1    private@
2    
3    type SortedItem<K, V> where K : Comparable = struct
4        key : K
5        value : V
6    
7        def (>) rhs = key > rhs.key
8        def (<) rhs = key < rhs.key
9        def (>=) rhs = key >= rhs.key
10       def (<=) rhs = key <= rhs.key
11   
12       is Comparable
13   
14   public@
15   
16   type MutList<T> where T : Comparable
17       def sort =
18           quicksort as_mut_slice 0 (size as i32 - 1)
19           version += 1
20   
21   type MutList<T>
22       def sort_by_key<U> (f : T -> U) where U : Comparable =
23           let list = List.new
24           list.provision size
25           for value in self do
26               let key = f value
27               let item = SortedItem =key =value
28               list.add item
29   
30           list.sort
31           for i = 0 to size do
32               self[i] = list[i].value
33   
34   end@ list
35