(.module: lux (lux (control [monad #+ do]) [macro]) (luxc ["&" lang] (lang [".L" extension] (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)) syntheses extensionL.all-syntheses #let [exprS (expressionS.synthesize syntheses exprA)] exprI (expressionT.translate exprS)] (evalT.eval exprI)))