def submod
import bend-collections-laws-math@1.0.0.0/src/math/generic.bend as Genericimport Base
import bend-collections-laws-math@1.0.0.0/src/math/num.bend as N
553# s0 - x mod m for s0, x < m, without leaving [0, m)
554def submod(~T: Data, ~op: N.Op<T> -> T, +m: T, +s0: T, +x: T, below: Bool) -> T:
555 match below:
556 case False{}:
557 op(N.Sub{s0, x})
558 case True{}:
559 op(N.Add{s0, op(N.Sub{m, x})})