def Map.ins.go
Base · base.bend:2776
import Base
2776
2777def Map.ins.go(
2778 -a: Quant, -V: Kind(a), node: Map<a, V>, x: V, +p: Nat, kb: String & Bool,
2779 t: Bool
2780) -> Map<a, V>:
2781 match node kb t:
2782 case MNode{q, lo, hi} Tuple{key, b} False{}:
2783 Map.ins.splice(a, V, p, key, x, MNode{q, lo, hi})
2784 case MNode{q, MTip{}, hi} Tuple{key, False{}} True{}:
2785 MNode{q, MLeaf{key, x}, hi}
2786 case MNode{q, MLeaf{k, v}, hi} Tuple{key, False{}} True{}:
2787 MNode{q, Map.ins.splice(a, V, p, key, x, MLeaf{k, v}), hi}
2788 case MNode{q, MNode{+r, c, d}, hi} Tuple{key, False{}} True{}:
2789 MNode{q, Map.ins.go(a, V, MNode{r, c, d}, x, p, Map.bit(key, r), Nat.is_lt(r, p)), hi}
2790 case MNode{q, lo, MTip{}} Tuple{key, True{}} True{}:
2791 MNode{q, lo, MLeaf{key, x}}
2792 case MNode{q, lo, MLeaf{k, v}} Tuple{key, True{}} True{}:
2793 MNode{q, lo, Map.ins.splice(a, V, p, key, x, MLeaf{k, v})}
2794 case MNode{q, lo, MNode{+r, c, d}} Tuple{key, True{}} True{}:
2795 MNode{q, lo, Map.ins.go(a, V, MNode{r, c, d}, x, p, Map.bit(key, r), Nat.is_lt(r, p))}
2796 case m _ _:
2797 m