diff options
Diffstat (limited to 'stdlib/source')
| -rw-r--r-- | stdlib/source/lux.lux | 6 | ||||
| -rw-r--r-- | stdlib/source/lux/control/pipe.lux | 8 | ||||
| -rw-r--r-- | stdlib/source/lux/data/color.lux | 14 | ||||
| -rw-r--r-- | stdlib/source/lux/data/format/css.lux | 4 | ||||
| -rw-r--r-- | stdlib/source/lux/host.jvm.lux | 16 | ||||
| -rw-r--r-- | stdlib/source/lux/time/duration.lux | 42 | ||||
| -rw-r--r-- | stdlib/source/lux/time/instant.lux | 18 | 
7 files changed, 63 insertions, 45 deletions
diff --git a/stdlib/source/lux.lux b/stdlib/source/lux.lux index 4f48518a1..793cf5a4d 100644 --- a/stdlib/source/lux.lux +++ b/stdlib/source/lux.lux @@ -5547,7 +5547,7 @@       ["Text"])      (#Named _ type') -    type' +    (flatten-alias type')      _      type)) @@ -5576,7 +5576,9 @@    (case token      [_ (#Identifier [def-prefix def-name])]      (if (text/= "" def-prefix) -      (:: Monad<Meta> return token) +      (do Monad<Meta> +        [current-module current-module-name] +        (anti-quote-def [current-module def-name]))        (anti-quote-def [def-prefix def-name]))      (^template [<tag>] diff --git a/stdlib/source/lux/control/pipe.lux b/stdlib/source/lux/control/pipe.lux index c23723f6d..4895a4f66 100644 --- a/stdlib/source/lux/control/pipe.lux +++ b/stdlib/source/lux/control/pipe.lux @@ -53,8 +53,7 @@                           [i/odd?] [(i/* +3)]                           [(new> -1)])))}    (with-gensyms [g!temp] -    (wrap (list (` (with-expansions -                     [(~ g!temp) (~ prev)] +    (wrap (list (` (let [(~ g!temp) (~ prev)]                       (cond (~+ (do list.Monad<List>                                   [[test then] branches]                                   (list (` (|> (~ g!temp) (~+ test))) @@ -66,6 +65,11 @@                          [(new> (~+ else))]                          (~ prev)))))) +(syntax: #export (when> test {then body^} prev) +  (wrap (list (` (cond> [(new> (~ test))] [(~+ then)] +                        [] +                        (~ prev)))))) +  (syntax: #export (loop> {test body^}                          {then body^}                          prev) diff --git a/stdlib/source/lux/data/color.lux b/stdlib/source/lux/data/color.lux index 335b937dd..55624f29e 100644 --- a/stdlib/source/lux/data/color.lux +++ b/stdlib/source/lux/data/color.lux @@ -32,7 +32,7 @@                     (n/% rgb green)                     (n/% rgb blue)])) -  (def: #export unpack +  (def: #export to-rgb      (-> Color [Nat Nat Nat])      (|>> :representation)) @@ -47,7 +47,7 @@  (def: #export (to-hsl color)    (-> Color [Frac Frac Frac]) -  (let [[red green blue] (unpack color) +  (let [[red green blue] (to-rgb color)          red (scale-down red)          green (scale-down green)          blue (scale-down blue) @@ -115,7 +115,7 @@  (def: #export (to-hsb color)    (-> Color [Frac Frac Frac]) -  (let [[red green blue] (unpack color) +  (let [[red green blue] (to-rgb color)          red (scale-down red)          green (scale-down green)          blue (scale-down blue) @@ -164,7 +164,7 @@  (def: #export (to-cmyk color)    (-> Color [Frac Frac Frac Frac]) -  (let [[red green blue] (unpack color) +  (let [[red green blue] (to-rgb color)          red (scale-down red)          green (scale-down green)          blue (scale-down blue) @@ -210,8 +210,8 @@                                (f/+ (|> end .int int-to-frac (f/* dE)))                                frac-to-int                                .nat))) -        [redS greenS blueS] (unpack start) -        [redE greenE blueE] (unpack end)] +        [redS greenS blueS] (to-rgb start) +        [redE greenE blueE] (to-rgb end)]      (color [(interpolate' redE redS)              (interpolate' greenE greenS)              (interpolate' blueE blueS)]))) @@ -230,7 +230,7 @@  (def: #export (complement color)    (-> Color Color) -  (let [[red green blue] (unpack color) +  (let [[red green blue] (to-rgb color)          adjust (function (_ value) (|> top (n/- value)))]      (..color [(adjust red)                (adjust green) diff --git a/stdlib/source/lux/data/format/css.lux b/stdlib/source/lux/data/format/css.lux index 133beac38..083195972 100644 --- a/stdlib/source/lux/data/format/css.lux +++ b/stdlib/source/lux/data/format/css.lux @@ -41,7 +41,7 @@  (def: #export (rgb color)    (-> Color Value) -  (let [[red green blue] (color.unpack color)] +  (let [[red green blue] (color.to-rgb color)]      (format "rgb(" (|> red .int %i)              "," (|> green .int %i)              "," (|> blue .int %i) @@ -49,7 +49,7 @@  (def: #export (rgba color alpha)    (-> Color Rev Value) -  (let [[red green blue] (color.unpack color)] +  (let [[red green blue] (color.to-rgb color)]      (format "rgba(" (|> red .int %i)              "," (|> green .int %i)              "," (|> blue .int %i) diff --git a/stdlib/source/lux/host.jvm.lux b/stdlib/source/lux/host.jvm.lux index e7d28dd04..201c49094 100644 --- a/stdlib/source/lux/host.jvm.lux +++ b/stdlib/source/lux/host.jvm.lux @@ -621,7 +621,8 @@      (#StaticMethod strict? type-vars args return-type return-expr exs)      (make-static-method-parser params class-name method-name args) -    (^or (#VirtualMethod final? strict? type-vars args return-type return-expr exs) (#OverridenMethod strict? owner-class type-vars args return-type return-expr exs)) +    (^or (#VirtualMethod final? strict? type-vars args return-type return-expr exs) +         (#OverridenMethod strict? owner-class type-vars args return-type return-expr exs))      (make-special-method-parser params class-name method-name args)      (#AbstractMethod type-vars args return-type exs) @@ -630,7 +631,7 @@      (#NativeMethod type-vars args return-type exs)      (make-virtual-method-parser params class-name method-name args))) -## Syntaxs +## Syntaxes  (def: (full-class-name^ imports)    (-> Class-Imports (Syntax Text))    (do p.Monad<Parser> @@ -824,8 +825,8 @@  (def: (arg-decl^ imports type-vars)    (-> Class-Imports (List Type-Paramameter) (Syntax ArgDecl)) -  (s.tuple (p.and s.local-identifier -                  (generic-type^ imports type-vars)))) +  (s.record (p.and s.local-identifier +                   (generic-type^ imports type-vars))))  (def: (arg-decls^ imports type-vars)    (-> Class-Imports (List Type-Paramameter) (Syntax (List ArgDecl))) @@ -833,7 +834,7 @@  (def: (constructor-arg^ imports type-vars)    (-> Class-Imports (List Type-Paramameter) (Syntax ConstructorArg)) -  (s.tuple (p.and (generic-type^ imports type-vars) s.any))) +  (s.record (p.and (generic-type^ imports type-vars) s.any)))  (def: (constructor-args^ imports type-vars)    (-> Class-Imports (List Type-Paramameter) (Syntax (List ConstructorArg))) @@ -1211,7 +1212,10 @@                                                        args (s.tuple (p.exactly (list.size arg-decls) s.any))                                                        #let [arg-decls' (: (List Text) (list/map (|>> product.right (simple-class$ (list)))                                                                                                  arg-decls))]] -                                                     (wrap (`' ((~ (code.text (format "jvm invokespecial" ":" (get@ #super-class-name super-class) ":" name ":" (text.join-with "," arg-decls')))) +                                                     (wrap (`' ((~ (code.text (format "jvm invokespecial" +                                                                                      ":" (get@ #super-class-name super-class) +                                                                                      ":" name +                                                                                      ":" (text.join-with "," arg-decls'))))                                                                  (~' _jvm_this) (~+ args)))))))]        (with-parens          (spaced (list "override" diff --git a/stdlib/source/lux/time/duration.lux b/stdlib/source/lux/time/duration.lux index d7b0abb24..d14ce451e 100644 --- a/stdlib/source/lux/time/duration.lux +++ b/stdlib/source/lux/time/duration.lux @@ -16,7 +16,7 @@      abstract]])  (abstract: #export Duration -  {#.doc "Durations have a resolution of milliseconds."} +  {#.doc "Durations have a resolution of milli-seconds."}    Int    (def: #export from-millis @@ -36,9 +36,16 @@      [frame i/%]      ) -  (def: #export (scale scalar duration) -    (-> Int Duration Duration) -    (:abstraction (i/* scalar (:representation duration)))) +  (do-template [<name> <op>] +    [(def: #export (<name> scalar duration) +       (-> Int Duration Duration) +       (:abstraction (<op> scalar (:representation duration))))] + +    [scale-up i/*] +    [scale-down i//] +    ) + +  (def: #export inverse (scale-up -1))    (def: #export (query param subject)      (-> Duration Duration Int) @@ -67,17 +74,18 @@      [positive? i/>]      [negative? i/<] -    [neutral?  i/=]) +    [neutral?  i/=] +    )    )  (def: #export empty Duration (from-millis +0))  (def: #export milli Duration (from-millis +1)) -(def: #export second Duration (scale +1_000 milli)) -(def: #export minute Duration (scale +60 second)) -(def: #export hour Duration (scale +60 minute)) -(def: #export day Duration (scale +24 hour)) -(def: #export week Duration (scale +7 day)) -(def: #export normal-year Duration (scale +365 day)) +(def: #export second Duration (scale-up +1_000 milli)) +(def: #export minute Duration (scale-up +60 second)) +(def: #export hour Duration (scale-up +60 minute)) +(def: #export day Duration (scale-up +24 hour)) +(def: #export week Duration (scale-up +7 day)) +(def: #export normal-year Duration (scale-up +365 day))  (def: #export leap-year Duration (merge day normal-year))  (structure: #export _ (Monoid Duration) @@ -94,7 +102,7 @@                   (int/abs days)                   days)            time-left (if signed? -                      (scale -1 time-left) +                      (scale-up -1 time-left)                        time-left)            [hours time-left] [(query hour time-left) (frame hour time-left)]            [minutes time-left] [(query minute time-left) (frame minute time-left)] @@ -141,11 +149,11 @@                   (and (i/>= +0 utc-millis)                        (i/<= +999 utc-millis)))]      (wrap (|> empty -              (merge (scale (sign utc-day) day)) -              (merge (scale (sign utc-hour) hour)) -              (merge (scale (sign utc-minute) minute)) -              (merge (scale (sign utc-second) second)) -              (merge (scale (sign utc-millis) milli)))))) +              (merge (scale-up (sign utc-day) day)) +              (merge (scale-up (sign utc-hour) hour)) +              (merge (scale-up (sign utc-minute) minute)) +              (merge (scale-up (sign utc-second) second)) +              (merge (scale-up (sign utc-millis) milli))))))  (def: (decode input)    (-> Text (e.Error Duration)) diff --git a/stdlib/source/lux/time/instant.lux b/stdlib/source/lux/time/instant.lux index d6c506218..64d4fe172 100644 --- a/stdlib/source/lux/time/instant.lux +++ b/stdlib/source/lux/time/instant.lux @@ -102,7 +102,7 @@        (if (i/= +0 (duration.query year time-left))          [reference time-left]          (if (duration/>= duration.empty time-left) -          (recur (inc reference) (duration.merge (duration.scale -1 year) time-left)) +          (recur (inc reference) (duration.merge (duration.scale-up -1 year) time-left))            (recur (dec reference) (duration.merge year time-left)))          )))) @@ -121,14 +121,14 @@    (-> (Row Nat) duration.Duration [Nat duration.Duration])    (if (duration/>= duration.empty time)      (row/fold (function (_ month-days [current-month time-left]) -                (let [month-duration (duration.scale (.int month-days) duration.day)] +                (let [month-duration (duration.scale-up (.int month-days) duration.day)]                    (if (i/= +0 (duration.query month-duration time-left))                      [current-month         time-left] -                    [(inc current-month) (duration.merge (duration.scale -1 month-duration) time-left)]))) +                    [(inc current-month) (duration.merge (duration.scale-up -1 month-duration) time-left)])))                [0 time]                months)      (row/fold (function (_ month-days [current-month time-left]) -                (let [month-duration (duration.scale (.int month-days) duration.day)] +                (let [month-duration (duration.scale-up (.int month-days) duration.day)]                    (if (i/= +0 (duration.query month-duration time-left))                      [current-month         time-left]                      [(dec current-month) (duration.merge month-duration time-left)]))) @@ -293,11 +293,11 @@                            (i/+ (.int month-days-so-far))                            (i/+ (dec utc-day)))]]      (wrap (|> epoch -              (shift (duration.scale total-days duration.day)) -              (shift (duration.scale utc-hour duration.hour)) -              (shift (duration.scale utc-minute duration.minute)) -              (shift (duration.scale utc-second duration.second)) -              (shift (duration.scale utc-millis duration.milli)))))) +              (shift (duration.scale-up total-days duration.day)) +              (shift (duration.scale-up utc-hour duration.hour)) +              (shift (duration.scale-up utc-minute duration.minute)) +              (shift (duration.scale-up utc-second duration.second)) +              (shift (duration.scale-up utc-millis duration.milli))))))  (def: (decode input)    (-> Text (e.Error Instant))  | 
