(;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)))