aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux
diff options
context:
space:
mode:
authorEduardo Julian2020-12-02 20:37:13 -0400
committerEduardo Julian2020-12-02 20:37:13 -0400
commit28c724857d76afdc40b5b036f415cc151eb66263 (patch)
tree3e970ca2a10dd7bb5c7ddd405349762945464d39 /stdlib/source/lux
parent34e310622bdeb1d0588c0664c0e78cbaa84f837c (diff)
Replaced "contains?" function with "key?" function.
Diffstat (limited to 'stdlib/source/lux')
-rw-r--r--stdlib/source/lux/data/collection/dictionary.lux4
-rw-r--r--stdlib/source/lux/data/collection/dictionary/ordered.lux6
-rw-r--r--stdlib/source/lux/data/collection/set.lux4
-rw-r--r--stdlib/source/lux/data/collection/set/ordered.lux2
-rw-r--r--stdlib/source/lux/data/number/i16.lux7
-rw-r--r--stdlib/source/lux/data/number/i32.lux7
-rw-r--r--stdlib/source/lux/data/number/i64.lux40
-rw-r--r--stdlib/source/lux/data/number/i8.lux7
-rw-r--r--stdlib/source/lux/target/jvm/loader.lux2
-rw-r--r--stdlib/source/lux/tool/compiler/version.lux47
-rw-r--r--stdlib/source/lux/world/file/watch.lux3
11 files changed, 93 insertions, 36 deletions
diff --git a/stdlib/source/lux/data/collection/dictionary.lux b/stdlib/source/lux/data/collection/dictionary.lux
index efb99a8b4..8ca61b453 100644
--- a/stdlib/source/lux/data/collection/dictionary.lux
+++ b/stdlib/source/lux/data/collection/dictionary.lux
@@ -574,8 +574,8 @@
(let [[Hash<k> node] dict]
(get' root-level (\ Hash<k> hash key) key Hash<k> node)))
-(def: #export (contains? key dict)
- (All [k v] (-> k (Dictionary k v) Bit))
+(def: #export (key? dict key)
+ (All [k v] (-> (Dictionary k v) k Bit))
(case (get key dict)
#.None #0
(#.Some _) #1))
diff --git a/stdlib/source/lux/data/collection/dictionary/ordered.lux b/stdlib/source/lux/data/collection/dictionary/ordered.lux
index b924a2e5d..c558a7669 100644
--- a/stdlib/source/lux/data/collection/dictionary/ordered.lux
+++ b/stdlib/source/lux/data/collection/dictionary/ordered.lux
@@ -75,8 +75,10 @@
(recur (get@ #right node))))
))))
-(def: #export (contains? key dict)
- (All [k v] (-> k (Dictionary k v) Bit))
+## TODO: Doing inneficient access of Order functions due to compiler bug.
+## TODO: Must improve it as soon as bug is fixed.
+(def: #export (key? dict key)
+ (All [k v] (-> (Dictionary k v) k Bit))
(let [## (^open "_\.") (get@ #&order dict)
]
(loop [node (get@ #root dict)]
diff --git a/stdlib/source/lux/data/collection/set.lux b/stdlib/source/lux/data/collection/set.lux
index 80cdf89a6..b47c5761d 100644
--- a/stdlib/source/lux/data/collection/set.lux
+++ b/stdlib/source/lux/data/collection/set.lux
@@ -35,9 +35,9 @@
(All [a] (-> a (Set a) (Set a)))
//.remove)
-(def: #export (member? set elem)
+(def: #export member?
(All [a] (-> (Set a) a Bit))
- (//.contains? elem set))
+ //.key?)
(def: #export to-list
(All [a] (-> (Set a) (List a)))
diff --git a/stdlib/source/lux/data/collection/set/ordered.lux b/stdlib/source/lux/data/collection/set/ordered.lux
index d350c1e9c..7a2584227 100644
--- a/stdlib/source/lux/data/collection/set/ordered.lux
+++ b/stdlib/source/lux/data/collection/set/ordered.lux
@@ -20,7 +20,7 @@
(def: #export (member? set elem)
(All [a] (-> (Set a) a Bit))
- (|> set :representation (/.contains? elem)))
+ (/.key? (:representation set) elem))
(template [<type> <name> <alias>]
[(def: #export <name>
diff --git a/stdlib/source/lux/data/number/i16.lux b/stdlib/source/lux/data/number/i16.lux
index 44fe0e988..4ca313730 100644
--- a/stdlib/source/lux/data/number/i16.lux
+++ b/stdlib/source/lux/data/number/i16.lux
@@ -15,6 +15,7 @@
..sub}
(I64 size)))
-(def: #export i16 (-> I64 I16) (get@ #i64.narrow ..sub))
-(def: #export i64 (-> I16 I64) (get@ #i64.wide ..sub))
-(def: #export equivalence (Equivalence I16) (get@ #i64.equivalence ..sub))
+(def: #export equivalence (Equivalence I16) (\ ..sub &equivalence))
+(def: #export width Nat (\ ..sub width))
+(def: #export i16 (-> I64 I16) (\ ..sub narrow))
+(def: #export i64 (-> I16 I64) (\ ..sub widen))
diff --git a/stdlib/source/lux/data/number/i32.lux b/stdlib/source/lux/data/number/i32.lux
index 560168f6f..35391519b 100644
--- a/stdlib/source/lux/data/number/i32.lux
+++ b/stdlib/source/lux/data/number/i32.lux
@@ -15,6 +15,7 @@
..sub}
(I64 size)))
-(def: #export i32 (-> I64 I32) (get@ #i64.narrow ..sub))
-(def: #export i64 (-> I32 I64) (get@ #i64.wide ..sub))
-(def: #export equivalence (Equivalence I32) (get@ #i64.equivalence ..sub))
+(def: #export equivalence (Equivalence I32) (\ ..sub &equivalence))
+(def: #export width Nat (\ ..sub width))
+(def: #export i32 (-> I64 I32) (\ ..sub narrow))
+(def: #export i64 (-> I32 I64) (\ ..sub widen))
diff --git a/stdlib/source/lux/data/number/i64.lux b/stdlib/source/lux/data/number/i64.lux
index 79bf7632d..249ae9046 100644
--- a/stdlib/source/lux/data/number/i64.lux
+++ b/stdlib/source/lux/data/number/i64.lux
@@ -143,25 +143,33 @@
[conjunction ..true ..and]
)
-(type: #export (Sub size)
- {#narrow (-> I64 (I64 size))
- #wide (-> (I64 size) I64)
- #equivalence (Equivalence (I64 size))})
+(signature: #export (Sub size)
+ (: (Equivalence (I64 size))
+ &equivalence)
+ (: Nat
+ width)
+ (: (-> I64 (I64 size))
+ narrow)
+ (: (-> (I64 size) I64)
+ widen))
(def: #export (sub width)
(Ex [size] (-> Nat (Maybe (Sub size))))
(if (.and (n.> 0 width)
(n.< ..width width))
- (let [top (dec width)
- shift (n.- width ..width)
- sign (..bit top)
- number (..mask (dec width))]
- (#.Some {#narrow (function (narrow value)
- (..or (|> value (..and ..sign) (..logic-right-shift shift))
- (|> value (..and number))))
- #wide (function (wide value)
- (|> (..or (|> value (..and sign) (..left-shift shift))
- (|> value (..clear top)))
- .i64))
- #equivalence ..equivalence}))
+ (let [sign-shift (n.- width ..width)
+ sign (..bit (dec width))
+ mantissa (..mask (dec width))
+ co-mantissa (..xor (.i64 -1) mantissa)]
+ (#.Some (: Sub
+ (structure
+ (def: &equivalence ..equivalence)
+ (def: width width)
+ (def: (narrow value)
+ (..or (|> value (..and ..sign) (..logic-right-shift sign-shift))
+ (|> value (..and mantissa))))
+ (def: (widen value)
+ (.i64 (case (.nat (..and sign value))
+ 0 value
+ _ (..or co-mantissa value))))))))
#.None))
diff --git a/stdlib/source/lux/data/number/i8.lux b/stdlib/source/lux/data/number/i8.lux
index a6475eb15..49b9cca95 100644
--- a/stdlib/source/lux/data/number/i8.lux
+++ b/stdlib/source/lux/data/number/i8.lux
@@ -15,6 +15,7 @@
..sub}
(I64 size)))
-(def: #export i8 (-> I64 I8) (get@ #i64.narrow ..sub))
-(def: #export i64 (-> I8 I64) (get@ #i64.wide ..sub))
-(def: #export equivalence (Equivalence I8) (get@ #i64.equivalence ..sub))
+(def: #export equivalence (Equivalence I8) (\ ..sub &equivalence))
+(def: #export width Nat (\ ..sub width))
+(def: #export i8 (-> I64 I8) (\ ..sub narrow))
+(def: #export i64 (-> I8 I64) (\ ..sub widen))
diff --git a/stdlib/source/lux/target/jvm/loader.lux b/stdlib/source/lux/target/jvm/loader.lux
index 74bfabc44..8f9f47e4f 100644
--- a/stdlib/source/lux/target/jvm/loader.lux
+++ b/stdlib/source/lux/target/jvm/loader.lux
@@ -130,7 +130,7 @@
(-> Text Binary Library (IO (Try Any)))
(do {! io.monad}
[library' (atom.read library)]
- (if (dictionary.contains? name library')
+ (if (dictionary.key? library' name)
(wrap (exception.throw ..already-stored name))
(do !
[_ (atom.update (dictionary.put name bytecode) library)]
diff --git a/stdlib/source/lux/tool/compiler/version.lux b/stdlib/source/lux/tool/compiler/version.lux
index 3965b9b28..df405e75d 100644
--- a/stdlib/source/lux/tool/compiler/version.lux
+++ b/stdlib/source/lux/tool/compiler/version.lux
@@ -1,5 +1,50 @@
(.module:
- [lux #*])
+ [lux #*
+ [data
+ [number
+ ["n" nat]]
+ [text
+ ["%" format]]]])
(type: #export Version
Nat)
+
+(def: range 100)
+
+(def: level
+ (n.% ..range))
+
+(def: current
+ (-> Nat Nat)
+ (|>>))
+
+(def: next
+ (n./ ..range))
+
+(def: #export patch
+ (-> Version Nat)
+ (|>> ..current ..level))
+
+(def: #export minor
+ (-> Version Nat)
+ (|>> ..next ..level))
+
+(def: #export major
+ (-> Version Nat)
+ (|>> ..next ..next ..level))
+
+(def: separator ".")
+
+(def: (padded value)
+ (-> Nat Text)
+ (if (n.< 10 value)
+ (%.format "0" (%.nat value))
+ (%.nat value)))
+
+(def: #export (format version)
+ (%.Format Version)
+ (%.format (..padded (..major version))
+ ..separator
+ (..padded (..minor version))
+ ..separator
+ (..padded (..patch version))))
diff --git a/stdlib/source/lux/world/file/watch.lux b/stdlib/source/lux/world/file/watch.lux
index a1bb5a6de..5d995bbd4 100644
--- a/stdlib/source/lux/world/file/watch.lux
+++ b/stdlib/source/lux/world/file/watch.lux
@@ -147,8 +147,7 @@
(do {! (try.with promise.monad)}
[current-files (..poll-files directory file-tracker)
#let [creations (if (..creation? concern)
- (list.filter (function (_ [path file last-modified])
- (not (dictionary.contains? path file-tracker)))
+ (list.filter (|>> product.left (dictionary.key? file-tracker) not)
current-files)
(list))
available (|> current-files