1    object List =
2        def from<T> (array : mut Array<T>) =
3            let size @param = array.size
4            let list = List<T> =array =size
5    
6            list.as_readonly
7    
8    object MutList<T> =
9        def from (slice : Slice<T>) =
10           let capacity @param = slice.size * 2
11           let list = List<T>.new
12           list.provision capacity
13           for i = 0 until slice.size do
14               list.add slice[i]
15   
16           list
17   
18   object List<T>
19       def from (slice : Slice<T>) =
20           let list = MutList<T>.from slice
21                                      capacity = slice.size
22           list.as_readonly
23   
24   fun from_slice<T> (slice : Slice<T>) : List<T> = List<T>.from slice
25   fun from_slice<T> (slice : Slice<T>) : MutList<T> = MutList<T>.from slice
26   
27   def list_of<T> (list : List<T> @vararg) = list
28   def mut_list_of<T> (list : MutList<T> @vararg) = list
29   
30   def repeat_list<T> (x : T) (n : u32) =
31       let list = List<T>.new
32       list.provision n
33       for _ = 1 to n do
34           list.add x
35   
36       list
37   
38   def repeat_list<T> (x : T) (n : i32) =
39       assert n >= 0
40       repeat_list x n.as<u32>
41