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