@@ -6,13 +6,13 @@ import lib/net/net
66import lib/ui/model
77import lib/ui/dirty
88import lib/ui/vector
9+ import lib/language/ic/term
910import lib/language/ic/parser
1011import lib/language/ic/compiler
1112import lib/language/lc/compiler
1213
13- import lib/language/ic/term
14-
15- type Mode { SourceLanguage(); LambdaCalculus(); InteractionCalculus() }
14+ // TODO: add SourceLanguage
15+ type Mode { LambdaCalculus(); InteractionCalculus() }
1616
1717type TextStream = => Unit / emit[Char] at {global}
1818record EvaluatorState[N](mode: Mode, sources: Map[Mode, TextStream], net: N, errors: String)
@@ -41,18 +41,15 @@ interface Model[C, O] {
4141}
4242
4343def show(m: Mode) = m match {
44- case SourceLanguage() => "Source Language"
4544 case LambdaCalculus() => "Lambda Calculus"
4645 case InteractionCalculus() => "Interaction Calculus"
4746}
4847
4948def empty[N, C, O](): EvaluatorState[N] / NetModel[N, C, O] = {
5049 var map = map::emptyGeneric[Mode, TextStream]()
5150 val emptyStream: => Unit / emit[Char] at {global} = box{}
52- map = map.put(SourceLanguage(), emptyStream)
5351 map = map.put(LambdaCalculus(), emptyStream)
5452 map = map.put(InteractionCalculus(), emptyStream)
55- // EvaluatorState(InteractionCalculus(), map, do empty(), "")
5653 EvaluatorState(LambdaCalculus(), map, do empty(), "")
5754}
5855
@@ -67,9 +64,8 @@ def report[E, N](proxy: on[E], rollback: EvaluatorState[N]) { prog: => Evaluator
6764def nextMode[N](state: EvaluatorState[N]): EvaluatorState[N] / Redraw = {
6865 do redrawFull()
6966 state match {
70- case EvaluatorState(SourceLanguage(), sources, net, errors) => EvaluatorState(LambdaCalculus(), sources, net, errors)
7167 case EvaluatorState(LambdaCalculus(), sources, net, errors) => EvaluatorState(InteractionCalculus(), sources, net, errors)
72- case EvaluatorState(InteractionCalculus(), sources, net, errors) => EvaluatorState(SourceLanguage (), sources, net, errors)
68+ case EvaluatorState(InteractionCalculus(), sources, net, errors) => EvaluatorState(LambdaCalculus (), sources, net, errors)
7369 }
7470}
7571
@@ -99,10 +95,11 @@ def render[N, C, O](state: EvaluatorState[N]): EvaluatorState[N] / { NetModel[N,
9995 EvaluatorState(InteractionCalculus(), sources, net_, "")
10096 }
10197 case EvaluatorState(LambdaCalculus(), sources, net, errors) => {
102- val net_ = do render(do load(net) { lc::compile!() })
103- EvaluatorState(LambdaCalculus(), sources, net_, "")
98+ val prog: Program = collect { lc::compile!() } // reify for storing in IC source
99+ val sources_ = sources.put(InteractionCalculus(), box { prog.show.each })
100+ val net_ = do render(do load(net) { prog() })
101+ EvaluatorState(LambdaCalculus(), sources_, net_, "")
104102 }
105- case _ => <>
106103 }
107104}
108105
@@ -111,12 +108,12 @@ def model[C, O, R, N] { prog: => R / Model[C, O] }: R / { State[EvaluatorState[N
111108
112109 try { prog() }
113110 with Model[C, O] {
114- def render() = resume { modifyState { st => st.render } }
111+ def render() = resume { modifyState { st => st.render } }
115112 def stepReduction() = resume { modifyState { net => do step(net) } }
116113 def stepAnimation() = resume { modifyState { net => do render(net) } }
117- def nextMode() = resume { modifyState { st => st.nextMode } }
118- def setSource(c) = resume { modifyState { st => st.setSource(c) } }
119- def onContext(op) = resume { modifyState { net => do operation(net, op) } }
114+ def nextMode() = resume { modifyState { st => st.nextMode } }
115+ def setSource(c) = resume { modifyState { st => st.setSource(c) } }
116+ def onContext(op) = resume { modifyState { net => do operation(net, op) } }
120117
121118 def getMode() = resume((do getState()).mode)
122119 def getSource(mode) = {
0 commit comments