aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/static.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux/static.lux')
-rw-r--r--stdlib/source/library/lux/static.lux71
1 files changed, 71 insertions, 0 deletions
diff --git a/stdlib/source/library/lux/static.lux b/stdlib/source/library/lux/static.lux
new file mode 100644
index 000000000..0a506ef2d
--- /dev/null
+++ b/stdlib/source/library/lux/static.lux
@@ -0,0 +1,71 @@
+(.module:
+ [library
+ [lux (#- nat int rev)
+ ["." meta]
+ [abstract
+ [monad (#+ do)]]
+ [control
+ ["<>" parser
+ ["<.>" code]]]
+ [macro
+ [syntax (#+ syntax:)]
+ ["." code]]
+ [math
+ [number (#+ hex)]
+ ["." random (#+ Random)]]]])
+
+(template [<name> <type> <format>]
+ [(syntax: .public (<name> [expression <code>.any])
+ (\ meta.monad map
+ (|>> (:as <type>) <format> list)
+ (meta.eval <type> expression)))]
+
+ [nat .Nat code.nat]
+ [int .Int code.int]
+ [rev .Rev code.rev]
+ [frac .Frac code.frac]
+ [text .Text code.text]
+ )
+
+(def: pcg_32_magic_inc
+ Nat
+ (hex "FEDCBA9876543210"))
+
+(with_expansions [<type> (Ex [a]
+ [(-> a Code)
+ a])]
+ (syntax: .public (literal [format <code>.any
+ expression <code>.any])
+ (do meta.monad
+ [pair (meta.eval (type <type>)
+ (` [(~ format) (~ expression)]))
+ .let [[format expression] (:as <type> pair)]]
+ (in (list (format expression))))))
+
+(template [<name> <random> <format>]
+ [(syntax: .public (<name> [])
+ (do meta.monad
+ [seed meta.seed
+ .let [[_ result] (random.result (random.pcg_32 [..pcg_32_magic_inc seed])
+ <random>)]]
+ (in (list (<format> result)))))]
+
+ [random_nat random.nat code.nat]
+ [random_int random.int code.int]
+ [random_rev random.rev code.rev]
+ [random_frac random.frac code.frac]
+ )
+
+(with_expansions [<type> (Ex [a]
+ [(-> a Code)
+ (Random a)])]
+ (syntax: .public (random [format <code>.any
+ random <code>.any])
+ (do meta.monad
+ [pair (meta.eval (type <type>)
+ (` [(~ format) (~ random)]))
+ .let [[format random] (:as <type> pair)]
+ seed meta.seed
+ .let [[_ result] (random.result (random.pcg_32 [..pcg_32_magic_inc seed])
+ random)]]
+ (in (list (format result))))))