def foo (a : Array Nat) : Array Nat := let a := a.push 0; let a := a.push 1; let a := a.push 2; let a := a.push 3; a def main : IO UInt32 := do let a : Array Nat := Array.empty; IO.println (toString a); IO.println (toString a.sz); let a := foo a; IO.println (toString a); let a := a.map (fun a => a + 10); IO.println (toString a); IO.println (toString a.sz); let a1 := a.pop; let a2 := a.push 100; IO.println (toString a1); IO.println (toString a2); let a2 := a.pop; IO.println a2; IO.println $ (([1, 2, 3, 4].toArray).map (fun a => a + 2)).map toString; IO.println $ ([1, 2, 3, 4].toArray.extract 1 3); IO.println $ ([1, 2, 3, 4].toArray.extract 0 100); IO.println $ ([1, 2, 3, 4].toArray.extract 1 1); IO.println $ ([1, 2, 3, 4].toArray.extract 2 4); IO.println [1,2,3,4].toArray.reverse; IO.println ([] : List Nat).toArray.reverse; IO.println [1,2,3].toArray.reverse; IO.println $ [1,2,3,4].toArray.filter (fun a => a % 2 == 0); IO.println $ [1,2,3,4,5].toArray.filter (fun a => a % 2 == 0); IO.println $ [1,2,3,4,5].toArray.filter (fun a => a % 2 == 1); IO.println $ [1,2,3,4].toArray.filter (fun a => a > 2); IO.println $ [1,2,3,4].toArray.filter (fun a => a > 10); IO.println $ [1,2,3,4].toArray.filter (fun a => a > 0); pure 0