type FixedVec { len: usize, items: [N]T, fn push(self: mutref, value: T) -> Void raises [Full] { if self.len == N { raise Full } self.items[self.len] = value self.len = self.len + 1 } fn get(self: ref, index: usize) -> Maybe { return std.mem.get(self.items, index) } fn count(self: ref) -> usize { return self.len } } pub fn main(world: World) -> Void raises { var vec: FixedVec = FixedVec { len: 0, items: [0, 0, 0, 0] } check FixedVec.push(&mut vec, 7) check FixedVec.push(&mut vec, 9) let first: Maybe = FixedVec.get(&vec, 0) let missing: Maybe = FixedVec.get(&vec, 8) if first.has && first.value == 7 && !missing.has && FixedVec.count(&vec) == 2 { check world.out.write("generic shape methods ok\n") } }