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