(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)]] [control ["." io (#+ IO)]] [data ["." error]] [math ["r" random]] [tool [compiler [phase [macro (#+ Expander)] [generation (#+ Bundle)]] [default [platform (#+ Platform)]]]]] ["." / #_ ["#." common (#+ Runner Definer)] ["#./" generation #_ ["#." primitive] ["#." structure] ["#." reference] ["#." case] ["#." function] ["#." common]]]) (def: (test runner definer) (-> Runner Definer Test) ($_ _.and (/generation/primitive.spec runner) (/generation/structure.spec runner) (/generation/reference.spec runner definer) (/generation/case.spec runner) (/generation/function.spec runner) (/generation/common.spec runner) )) (def: #export (spec platform bundle expander program) (All [anchor expression statement] (-> (IO (Platform IO anchor expression statement)) (Bundle anchor expression statement) Expander (-> expression statement) Test)) (do r.monad [_ (wrap []) #let [?runner,definer (<| io.run (do io.monad [platform platform]) (/common.executors platform bundle expander program))]] (case ?runner,definer (#error.Success [runner definer]) (..test runner definer) (#error.Failure error) (_.fail error))))