(.module: [library [lux {"-" [nat int rev]} ["." meta] [abstract [monad {"+" [do]}]] [control ["<>" parser ["<.>" code]]] [macro [syntax {"+" [syntax:]}] ["." code]] [math [number {"+" [hex]}] ["." random {"+" [Random]}]]]]) (template [ ] [(syntax: .public ( [expression .any]) (\ meta.monad each (|>> (:as ) list) (meta.eval 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 [ (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)))))) (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_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))))))