diff options
Diffstat (limited to 'stdlib/source/library/lux/static.lux')
-rw-r--r-- | stdlib/source/library/lux/static.lux | 71 |
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)))))) |