aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/eval.lux
blob: e691ec7a1dac91b48968422c01b6a8d9c6d743a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(;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<Meta>
    [exprA (&;with-type type
             (expressionA;analyser eval exprC))
     #let [exprS (expressionS;synthesize exprA)]
     exprI (expressionT;translate exprS)]
    (evalT;eval exprI)))