(.module: lux (lux (control [monad #+ do]) [macro]) (luxc ["&" lang] (lang (analysis [".A" expression]) (synthesis [".S" expression]) (translation [".T" expression] [".T" eval])))) (def: #export (eval type exprC) &.Eval (do macro.Monad [exprA (&.with-type type (expressionA.analyser eval exprC)) #let [exprS (expressionS.synthesize exprA)] exprI (expressionT.translate exprS)] (evalT.eval exprI)))