(.module: lux (lux (control [monad #+ do] ["ex" exception #+ exception:]) (data [maybe] text/format (coll (dictionary ["dict" unordered #+ Dict])))) (luxc ["&" lang] (lang ["ls" synthesis] (host [r #+ Expression]))) [//] (/ ["/." common] ["/." host])) (exception: #export (Unknown-Procedure {message Text}) message) (def: procedures /common.Bundle (|> /common.procedures (dict.merge /host.procedures))) (def: #export (translate-procedure translate name args) (-> (-> ls.Synthesis (Meta Expression)) Text (List ls.Synthesis) (Meta Expression)) (<| (maybe.default (&.throw Unknown-Procedure (%t name))) (do maybe.Monad [proc (dict.get name procedures)] (wrap (proc translate args)))))