def perm_go
bend-collections@1.0.0.0 · src/math/generic.bend:459
import bend-collections@1.0.0.0/src/math/generic.bend as Generic
import Base
import bend-collections@1.0.0.0/src/math/num.bend as N
459
460def perm_go(~T: Data, ~op: N.Op<T> -> T, ~test: N.Test<T> -> Bool, fuel: Nat, +k: T, +m: T, st: T & Bool, more: Bool) -> Maybe<&2, T>:
461 match fuel st more:
462 case 0n _ _:
463 None{}
464 case 1n+f Tuple{a, False{}} _:
465 None{}
466 case 1n+f Tuple{+a, True{}} False{}:
467 Some{a}
468 case 1n+f Tuple{+a, True{}} True{}:
469 perm_go(~T, ~op, ~test, f, dec(~T, ~op, k), dec(~T, ~op, m), mul_by(~T, ~op, ~test, m, (a, True{})), Bool.not(test(N.IsZero{dec(~T, ~op, k)})))