(.module: [lux #* [control [monad (#+ do)] ["ex" exception (#+ exception:)]] [data [maybe] [text format] [collection ["dict" dictionary (#+ Dictionary)]]]] [///// [reference (#+ Register Variable)] [host ["_" scheme (#+ Computation)]] [compiler ("operation/" Monad) [synthesis (#+ Synthesis)]]] [//runtime (#+ Operation Translator)] [/common] ## [/host] ) (exception: #export (unknown-extension {message Text}) message) (def: extensions /common.Bundle (|> /common.extensions ## (dict.merge /host.extensions) )) (def: #export (extension translate name args) (-> Translator Text (List Synthesis) (Operation Computation)) (<| (maybe.default (compiler.throw unknown-extension (%t name))) (do maybe.Monad [ext (dict.get name extensions)] (wrap (ext translate args)))))