def shuffle.go
import bend-kit-random@0.1.0.1/random.bend as Randomimport Base
109# Fisher-Yates: at slot i, jr is below(i + 1); slot i swaps with slot j.
110# At k = 0, i is 0 and below(1) drew nothing.
111def shuffle.go(~T: Data, k: Nat, +i: U32, a: Array<T>, jr: U32 & Rng) -> Array<T> & Rng:
112 match k:
113 case 0n:
114 (j, r) = jr
115 (a, r)
116 case 1n+p:
117 (+j, r) = jr
118 shuffle.go(~T, p, (i - 1 : U32), shuffle.swap(~T, i, j, Array.get(T, a, i)),
119 below(i, r))