ns std::collections use std::collections::Collection pub int Stack : Collection { fn push(element: T) fn pop(): Option fn get_at(index: Int): Option } pub impl ArrayStack : Stack { fld arr: mut Array = array::of_length(16, std::reflect::default_or_empty) fld current_index: mut Int = 0 impl fn map(m) { let result: mut Array = array::of_length(arr.length, std::reflect::default_or_empty) for (element, i) in arr.iter_with_indices() { result[i] = m(element) } result } impl fn flat_map(m) { let result: mut Array = array::of_length(arr.length, std::reflect::default_or_empty>) for (element, i) in arr.iter_with_indices() { result[i] = m(element) } array::flatten(result) } impl fn get_size() = current_index impl fn push(element) { if current_index == arr.length { arr = array::clone(size = arr.length * 2, source = arr) } arr[current_index] = element current_index++ } impl fn pop() { if current_index > 0 { let element = arr[current_index - 1] current_index-- return Some(element) } None } impl fn get_at(index) = index < arr.length ? Some(arr[index]) : None } pub mod stack { pub fn of(items: ...T): List = ArrayList(items) }