(;module: lux (lux (control pipe) ["r" math/random "r/" Monad] (data ["R" result]) [macro] (macro [code])) (luxc ["&" base] [analyser]) (test/luxc common)) (def: gen-unit (r;Random Code) (r/wrap (' []))) (def: #export gen-primitive (r;Random [Type Code]) (with-expansions [ (do-template [ ] [(r;seq (r/wrap ) (r/map ))] [Unit code;tuple (r;list +0 gen-unit)] [Bool code;bool r;bool] [Nat code;nat r;nat] [Int code;int r;int] [Deg code;deg r;deg] [Real code;real r;real] [Char code;char r;char] [Text code;text (r;text +5)] )] ($_ r;either ))) (def: #export analyse &;Analyser (analyser;analyser (:!! []))) (do-template [ ] [(def: #export ( analysis) (All [a] (-> (Lux a) Bool)) (|> analysis (macro;run (init-compiler [])) (case> (#R;Success _) (#R;Error error) )))] [check-success true false] [check-failure false true] )