# Math subset. { pkgs, lib, self }: rec { /** Returns the absolute value of the given number. # Arguments number : The numerical value. # Type ``` abs :: Number -> Number ``` # Examples ```nix abs -4 => 4 abs (1 / 5) => 0.2 ``` */ abs = number: if number < 0 then -(number) else number; /** Exponentiates the given base with the exponent. # Arguments base : The base value. exponent : The exponent value. # Type ``` pow :: Integer -> Integer -> Integer ``` # Examples ```nix pow 2 3 => 8 pow 6 4 => 1296 ``` */ pow = base: exponent: # Just to be a contrarian, I'll just make this as a tail recursive function # instead lol. let absValue = abs exponent; iter = product: counter: maxCount: if counter > maxCount then product else iter (product * base) (counter + 1) maxCount; value = iter 1 1 absValue; in if exponent < 0 then (1 / value) else value; }