(.module: lux (lux (control [monad #+ do] ["ex" exception #+ exception:]) (data [maybe] [text] text/format (coll [dict]))) (luxc ["&" lang] (lang ["la" analysis])) (/ ["/." common] ["/." host])) (exception: #export Unknown-Procedure) (def: procedures /common.Bundle (|> /common.procedures (dict.merge /host.procedures))) (def: #export (analyse-procedure analyse eval proc-name proc-args) (-> &.Analyser &.Eval Text (List Code) (Meta la.Analysis)) (<| (maybe.default (&.throw Unknown-Procedure (%t proc-name))) (do maybe.Monad [proc (dict.get proc-name procedures)] (wrap ((proc proc-name) analyse eval proc-args)))))