;;;; vec-new and map-new take a type expression where they take a type, so a ;;;; local can hold a Vec of slices, of arrays or of pointers with nothing ;;;; else naming the element type. The last Vec names an allocator after its ;;;; type, which is the one argument that may follow. (defn main [] i32 (let [a (arena-new 4096) words (vec-new [const u8]) pairs (vec-new [2 i32]) ptrs (vec-new (Ptr i32)) opts (vec-new (Option i64) a) m (map-new str [const u8]) x (i32 7)] (push words (bytes-view "ab")) (push words (bytes-view "cde")) (push pairs [3 4]) (push ptrs (addr x)) (push opts (Some (i64 9))) (put m "k" (bytes-view "xyz")) (println (length words) (length (at words 1)) (at (at pairs 0) 1) (deref (at ptrs 0)) (match (at opts 0) (Some v) v None -1) (match (get m "k") (Some v) (length v) None -1)) (free words) (free pairs) (free ptrs) (free m)) 0)