def read_path
bendtorch-core@0.1.0.0 · src/storage/array.bend:42
import bendtorch-core@0.1.0.0/src/storage/array.bend as Array
import Base
import bendtorch-core@0.1.0.0/src/storage/model.bend as Model
42def read_path(-T: Data, +d: Nat, array: Array<T>, path: Model.Path(d),
43 -valid: Model.Balanced(T, d, array)) -> Read<T, d, array, path>:
44 match d array:
45 case 0n ALeaf{+value}:
46 Read{ALeaf{value}, Some{value}, valid, {==}, {==}}
47 case 0n ANode{xs, ys}:
48 Read{ANode{xs, ys}, None{}, valid, {==}, {==}}
49 case 1n+p ALeaf{value}:
50 Read{ALeaf{value}, None{}, valid, {==}, {==}}
51 case 1n++p ANode{xs, ys}:
52 Model.Step{bit, rest} = path
53 match bit:
54 case False{}:
55 low(T, p, xs, rest, ys, read_path(T, p, xs, rest, left(T, p, xs, ys, valid)),
56 right(T, p, xs, ys, valid))
57 case True{}:
58 high(T, p, ys, rest, xs, read_path(T, p, ys, rest, right(T, p, xs, ys, valid)),
59 left(T, p, xs, ys, valid))