aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/data/number.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/data/number.lux')
-rw-r--r--stdlib/source/lux/data/number.lux43
1 files changed, 22 insertions, 21 deletions
diff --git a/stdlib/source/lux/data/number.lux b/stdlib/source/lux/data/number.lux
index 82f8cadbb..b48aa5f7d 100644
--- a/stdlib/source/lux/data/number.lux
+++ b/stdlib/source/lux/data/number.lux
@@ -9,6 +9,7 @@
interval
codec)
(data ["R" result]
+ [maybe]
[bit])))
## [Structures]
@@ -180,7 +181,7 @@
(def: (encode value)
(loop [input value
output ""]
- (let [digit (assume (get-char <char-set> (n.% <base> input)))
+ (let [digit (maybe;assume (get-char <char-set> (n.% <base> input)))
output' (_lux_proc ["text" "append"] [digit output])
input' (n./ <base> input)]
(if (n.= +0 input')
@@ -196,7 +197,7 @@
(loop [idx +1
output +0]
(if (n.< input-size idx)
- (let [digit (assume (get-char input idx))]
+ (let [digit (maybe;assume (get-char input idx))]
(case (_lux_proc ["text" "index"] [<char-set> digit +0])
#;None
(#R;Error (_lux_proc ["text" "append"] [<error> repr]))
@@ -227,10 +228,10 @@
(loop [input (|> value (i./ <base>) (:: Number<Int> abs))
output (|> value (i.% <base>) (:: Number<Int> abs) int-to-nat
(get-char <char-set>)
- assume)]
+ maybe;assume)]
(if (i.= 0 input)
(_lux_proc ["text" "append"] [sign output])
- (let [digit (assume (get-char <char-set> (int-to-nat (i.% <base> input))))]
+ (let [digit (maybe;assume (get-char <char-set> (int-to-nat (i.% <base> input))))]
(recur (i./ <base> input)
(_lux_proc ["text" "append"] [digit output]))))))))
@@ -247,7 +248,7 @@
(loop [idx (if (i.= -1 sign) +1 +0)
output 0]
(if (n.< input-size idx)
- (let [digit (assume (get-char input idx))]
+ (let [digit (maybe;assume (get-char input idx))]
(case (_lux_proc ["text" "index"] [<char-set> digit +0])
#;None
(#R;Error <error>)
@@ -266,7 +267,7 @@
(def: (de-prefix input)
(-> Text Text)
- (assume (_lux_proc ["text" "clip"] [input +1 (_lux_proc ["text" "size"] [input])])))
+ (maybe;assume (_lux_proc ["text" "clip"] [input +1 (_lux_proc ["text" "size"] [input])])))
(do-template [<struct> <nat> <char-bit-size> <error>]
[(struct: #export <struct> (Codec Text Deg)
@@ -315,7 +316,7 @@
(_lux_proc ["text" "append"] ["." output])
(let [shifted (f.* <base> dec-left)
digit (|> shifted (f.% <base>) frac-to-int int-to-nat
- (get-char <char-set>) assume)]
+ (get-char <char-set>) maybe;assume)]
(recur (f.% 1.0 shifted)
(_lux_proc ["text" "append"] [output digit]))))))]
(_lux_proc ["text" "append"] [whole-part decimal-part])))
@@ -323,8 +324,8 @@
(def: (decode repr)
(case (_lux_proc ["text" "index"] [repr "." +0])
(#;Some split-index)
- (let [whole-part (assume (_lux_proc ["text" "clip"] [repr +0 split-index]))
- decimal-part (assume (_lux_proc ["text" "clip"] [repr (n.inc split-index) (_lux_proc ["text" "size"] [repr])]))]
+ (let [whole-part (maybe;assume (_lux_proc ["text" "clip"] [repr +0 split-index]))
+ decimal-part (maybe;assume (_lux_proc ["text" "clip"] [repr (n.inc split-index) (_lux_proc ["text" "size"] [repr])]))]
(case [(:: <int> decode whole-part)
(:: <int> decode decimal-part)]
(^multi [(#;Some whole) (#;Some decimal)]
@@ -368,8 +369,8 @@
(if (n.<= chunk-size num-digits)
(list digits)
(let [boundary (n.- chunk-size num-digits)
- chunk (assume (_lux_proc ["text" "clip"] [digits boundary num-digits]))
- remaining (assume (_lux_proc ["text" "clip"] [digits +0 boundary]))]
+ chunk (maybe;assume (_lux_proc ["text" "clip"] [digits boundary num-digits]))
+ remaining (maybe;assume (_lux_proc ["text" "clip"] [digits +0 boundary]))]
(list& chunk (segment-digits chunk-size remaining)))))))
(def: (bin-segment-to-hex input)
@@ -497,11 +498,11 @@
(def: (encode value)
(let [sign (:: Number<Frac> signum value)
raw-bin (:: Binary@Codec<Text,Frac> encode value)
- dot-idx (assume (_lux_proc ["text" "index"] [raw-bin "." +0]))
- whole-part (assume (_lux_proc ["text" "clip"] [raw-bin
- (if (f.= -1.0 sign) +1 +0)
- dot-idx]))
- decimal-part (assume (_lux_proc ["text" "clip"] [raw-bin (n.inc dot-idx) (_lux_proc ["text" "size"] [raw-bin])]))
+ dot-idx (maybe;assume (_lux_proc ["text" "index"] [raw-bin "." +0]))
+ whole-part (maybe;assume (_lux_proc ["text" "clip"] [raw-bin
+ (if (f.= -1.0 sign) +1 +0)
+ dot-idx]))
+ decimal-part (maybe;assume (_lux_proc ["text" "clip"] [raw-bin (n.inc dot-idx) (_lux_proc ["text" "size"] [raw-bin])]))
hex-output (|> (<from> false decimal-part)
["."]
(_lux_proc ["text" "append"])
@@ -520,8 +521,8 @@
1.0)]
(case (_lux_proc ["text" "index"] [repr "." +0])
(#;Some split-index)
- (let [whole-part (assume (_lux_proc ["text" "clip"] [repr (if (f.= -1.0 sign) +1 +0) split-index]))
- decimal-part (assume (_lux_proc ["text" "clip"] [repr (n.inc split-index) (_lux_proc ["text" "size"] [repr])]))
+ (let [whole-part (maybe;assume (_lux_proc ["text" "clip"] [repr (if (f.= -1.0 sign) +1 +0) split-index]))
+ decimal-part (maybe;assume (_lux_proc ["text" "clip"] [repr (n.inc split-index) (_lux_proc ["text" "size"] [repr])]))
as-binary (|> (<to> decimal-part)
["."]
(_lux_proc ["text" "append"])
@@ -602,7 +603,7 @@
(def: (digits-get idx digits)
(-> Nat Digits Nat)
- (default +0 (_lux_proc ["array" "get"] [digits idx])))
+ (maybe;default +0 (_lux_proc ["array" "get"] [digits idx])))
(def: (digits-put idx digit digits)
(-> Nat Nat Digits Digits)
@@ -677,7 +678,7 @@
(loop [idx +0
output (make-digits [])]
(if (n.< length idx)
- (let [char (assume (get-char input idx))]
+ (let [char (maybe;assume (get-char input idx))]
(case (_lux_proc ["text" "index"] ["0123456789" char +0])
#;None
#;None
@@ -749,7 +750,7 @@
(if (and dotted?
(n.<= (n.inc bit;width) length))
(case (|> (_lux_proc ["text" "clip"] [input +1 length])
- assume
+ maybe;assume
text-to-digits)
(#;Some digits)
(loop [digits digits