export min, max, between, pow, * use Prim (min, max, between, pow) use Iter to fn lshift (x, am): x * (2 pow(am)) fn rshift (x, am): x / (2 pow(am)) fn mod(l, d) r = l / d # There should be an assert that r >= 0... m = l - r * d if m < 0 return d + m else return m fn minimum(it): it Iter.reduce(None, fn(x, last-min): Misc.maybe(last-min, fn(lm): Just(min(lm,x)), Just(x))) fn maximum(it): it Iter.reduce(None, fn(x, last-max): Misc.maybe(last-max, fn(lm): Just(max(lm,x)), Just(x))) fn minmax(l, r): if l < r: (l, r) else (r, l) fn abs(x): if x >= 0: x else -x fn sqrt(f F64): Cnile.sqrt(f) # geeeeeeg fn floor(f F64): @f64-i64-floor(f) fn clamp(x, mn, mx) if x < mn return mn elif x > mx return mx else return x