type storage = (int, list(int)); type parameter = list(int); type return = (list(operation), storage); let x: list(int) = []; let y: list(int) = [3, 4, 5]; let z: list(int) = [2, ...y]; let main = (((action, s): (parameter, storage))): return => { let storage = switch(action) { | [] => s | [hd, ...tl] => (s[0] + hd, tl) }; ([] : list(operation), storage) }; let size_ = ((s: list(int))): nat => List.length(s); let fold_op = ((s: list(int))): int => { let aggregate = ((t: (int, int))) => t[0] + t[1]; List.fold(aggregate, s, 10) }; let map_op = ((s: list(int))): list(int) => List.map(((cur: int)) => cur + 1, s); let iter_op = ((s: list(int))): unit => { let do_nothing = ((useless: int)) => unit; List.iter(do_nothing, s) };