aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux.lux')
-rw-r--r--stdlib/source/lux.lux13
1 files changed, 13 insertions, 0 deletions
diff --git a/stdlib/source/lux.lux b/stdlib/source/lux.lux
index e4214a899..51e9af4dc 100644
--- a/stdlib/source/lux.lux
+++ b/stdlib/source/lux.lux
@@ -6054,3 +6054,16 @@
_
(fail "Wrong syntax for ^code")))
+
+(def: #export (n/mod param subject)
+ (-> Nat Nat Nat)
+ (let [exact (|> subject (n// param) (n/* param))]
+ (|> subject (n/- exact))))
+
+(def: #export (i/mod param subject)
+ (All [m] (-> Int Int Int))
+ (let [raw (i/% param subject)]
+ (if (i/< 0 raw)
+ (let [shift (if (i/< 0 param) i/- i/+)]
+ (|> raw (shift param)))
+ raw)))