(.using [library [lux {"-" nat int rev} ["[0]" meta] [abstract [monad {"+" do}]] [control ["<>" parser ["<[0]>" code]]] [data [collection ["[0]" list ("[1]#[0]" functor)]]] [macro [syntax {"+" syntax:}] ["[0]" code]] [math [number {"+" hex}] ["[0]" random {"+" Random}]]]]) (template [ ] [(syntax: .public ( [expression .any]) (# meta.monad each (|>> (:as ) list) (meta.eval expression)))] [bit .Bit code.bit] [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 [ (Ex (_ a) [(-> a Code) a])] (syntax: .public (literal [format .any expression .any]) (do meta.monad [pair (meta.eval (.type ) (` [(~ format) (~ expression)])) .let [[format expression] (:as pair)]] (in (list (format expression)))))) (with_expansions [ (Ex (_ a) [(-> a Code) (List a)])] (syntax: .public (literals [format .any expression .any]) (do meta.monad [pair (meta.eval (.type ) (` [(~ format) (~ expression)])) .let [[format expression] (:as pair)]] (in (list#each format expression))))) (template [ ] [(syntax: .public ( []) (do meta.monad [seed meta.seed .let [[_ result] (random.result (random.pcg_32 [..pcg_32_magic_inc seed]) )]] (in (list ( result)))))] [random_bit random.bit code.bit] [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 [ (Ex (_ a) [(-> a Code) (Random a)])] (syntax: .public (random [format .any random .any]) (do meta.monad [pair (meta.eval (type ) (` [(~ format) (~ random)])) .let [[format random] (:as pair)] seed meta.seed .let [[_ result] (random.result (random.pcg_32 [..pcg_32_magic_inc seed]) random)]] (in (list (format result)))))) (with_expansions [ (Ex (_ a) [(-> a Code) (Random (List a))])] (syntax: .public (randoms [format .any random .any]) (do meta.monad [pair (meta.eval (type ) (` [(~ format) (~ random)])) .let [[format random] (:as pair)] seed meta.seed .let [[_ result] (random.result (random.pcg_32 [..pcg_32_magic_inc seed]) random)]] (in (list#each format result)))))