struct Map { Vec: keys Vec: values impl: inline fn Map.new() -> [Map] { Vec.new:: Vec.new:: cast(Map) } inline fn Map.contains(Str &Map) -> [bool] { Map.get as [opt] &opt Option.is_some } fn Map.insert(Str: key T: value *Map: self) -> [Option] { key self Map.get_mut as [maybe_val] &maybe_val Option.is_some if { maybe_val Option.unwrap as [val] val @ Option.Some value val ! } else { key self::keys Vec.push value self::values Vec.push Option.None:: } } fn Map.get_mut(Str: key *Map: self) -> [Option<*T>] { 0 while dup self::keys Vec.len < do { as [i] key i self::keys Vec.at Option.unwrap Str.equals if { i self::values Vec.get_mut return } i 1 + } drop Option.None::<*T> } fn Map.get(Str: key &Map: self) -> [Option<&T>] { 0 while dup self::keys Vec.len < do { as [i] key i self::keys Vec.at Option.unwrap Str.equals if { i self::values Vec.get return } i 1 + } drop Option.None::<&T> } }