def Map.put.go

Base · base.bend:2732

import Base
2732# Map.put.go, Map.ins.go, Map.seek.go, Map.has.go, Map.get.go and
2733# Map.pop.go take the node they are in, whole, and the key's bit at it:
2734# the child they descend into is that node's field, a node rebuilt
2735def Map.put.go(-a: Quant, -V: Kind(a), node: Map<a, V>, x: V, kb: String & Bool) -> Map<a, V>:
2736  match node kb:
2737    case MNode{p, MTip{}, hi} Tuple{key, False{}}:
2738      MNode{p, MLeaf{key, x}, hi}
2739    case MNode{p, MLeaf{k, v}, hi} Tuple{key, False{}}:
2740      MNode{p, MLeaf{k, x}, hi}
2741    case MNode{p, MNode{+q, c, d}, hi} Tuple{key, False{}}:
2742      MNode{p, Map.put.go(a, V, MNode{q, c, d}, x, Map.bit(key, q)), hi}
2743    case MNode{p, lo, MTip{}} Tuple{key, True{}}:
2744      MNode{p, lo, MLeaf{key, x}}
2745    case MNode{p, lo, MLeaf{k, v}} Tuple{key, True{}}:
2746      MNode{p, lo, MLeaf{k, x}}
2747    case MNode{p, lo, MNode{+q, c, d}} Tuple{key, True{}}:
2748      MNode{p, lo, Map.put.go(a, V, MNode{q, c, d}, x, Map.bit(key, q))}
2749    case m _:
2750      m

Uses (6)

Used by (3)