(.module: lux (lux (control [monad #+ do])) (//// [compiler] [analysis #+ Variant Tuple] [synthesis #+ Synthesis] (host ["_" scheme #+ Expression])) [//runtime #+ Operation Translator] [//primitive]) (def: #export (tuple translate elemsS+) (-> Translator (Tuple Synthesis) (Operation Expression)) (case elemsS+ #.Nil (//primitive.text synthesis.unit) (#.Cons singletonS #.Nil) (translate singletonS) _ (do compiler.Monad [elemsT+ (monad.map @ translate elemsS+)] (wrap (_.vector/* elemsT+))))) (def: #export (variant translate [lefts right? valueS]) (-> Translator (Variant Synthesis) (Operation Expression)) (do compiler.Monad [valueT (translate valueS)] (wrap (//runtime.variant [lefts right? valueT]))))