struct Map[K, V](...);
impl [K, V; Fork[K], Fork[V]]: Fork[Map[K, V]];
impl [K, V; Drop[K], Drop[V]]: Drop[Map[K, V]];
impl [K, V; Fork[K], Fork[V]]: Fork[Map[K, V]];
impl [K, V; Drop[K], Drop[V]]: Drop[Map[K, V]];
impl [K, V; Ord[K], Drop[K], Drop[V]]: Concat[Map[K, V], Map[K, V], Map[K, V]];
impl [K, V; Drop[K], Drop[V], Ord[K]]: Collect[Map[K, V], (K, V)];
impl [K, V; Ord[K], Show[K], Show[V]]: Show[Map[K, V]];
const empty[K, V]: Map[K, V];
impl from_list[K, V; Ord[K], Drop[K], Drop[V]]: Cast[List[(K, V)], Map[K, V]];
fn clear[K, V; Ord[K], Drop[K], Drop[V]](self: &Map[K, V]);
fn len[K, V](self: &Map[K, V]) -> N32;
fn insert[K, V; Ord[K], Drop[K]](self: &Map[K, V], key: K, value: V) -> Option[V];
fn has[K, V; Ord[K]](self: &Map[K, V], key: &K) -> Bool;
fn at[K, V; Ord[K]](self: &Map[K, V], key: &K) -> Option[&V];
fn get[K, V; Ord[K], Fork[V]](self: &Map[K, V], key: &K) -> Option[V];
fn at_or_insert[K, V; Ord[K], Drop[K], Drop[V]](self: &Map[K, V], key: K, value: V) -> &V;
fn get_or_insert[K, V; Ord[K], Drop[K], Fork[V], Drop[V]](self: &Map[K, V], key: K, value: V) -> V;
fn at_le[K, V; Ord[K]](self: &Map[K, V], key: &K) -> Option[&(K, V)];
fn get_le[K, V; Ord[K], Fork[K], Fork[V]](self: &Map[K, V], key: &K) -> Option[(K, V)];
fn at_ge[K, V; Ord[K]](self: &Map[K, V], key: &K) -> Option[&(K, V)];
fn get_ge[K, V; Ord[K], Fork[K], Fork[V]](self: &Map[K, V], key: &K) -> Option[(K, V)];
fn remove[K, V; Ord[K], Drop[K]](self: &Map[K, V], key: &K) -> Option[V];
fn remove_min[K, V; Ord[K]](self: &Map[K, V]) -> Option[(K, V)];
fn remove_max[K, V; Ord[K]](self: &Map[K, V]) -> Option[(K, V)];
fn map_values[K, V, U, F; Ord[K], Fork[F], Drop[F], Fn[F, (&K, V), U]](self: Map[K, V], f: F) -> Map[K, U];
impl iter_ref[K, V; Ord[K]]: Cast[&Map[K, V], IterRef[K, V]];
struct IterRef[K, V](...);
impl iter[K, V; Ord[K]]: Cast[Map[K, V], Iter[K, V]];
struct Iter[K, V](...);
fn keys[K, V; Ord[K]](self: &Map[K, V]) -> Map[IterRef[K, V], Key];
struct Key(...);
fn values[K, V; Ord[K]](self: &Map[K, V]) -> Map[IterRef[K, V], Value];
struct Value(...);
impl to_list[K, V; Ord[K]]: Cast[Map[K, V], List[(K, V)]];
fn balanced[K, V; Ord[K]](self: &Map[K, V]) -> Bool;