@@ -21,6 +21,7 @@ module Model = {
2121 title: string ,
2222 prompt: string ,
2323 cells,
24+ write_out_steps: bool ,
2425 };
2526
2627 [@ deriving (show({with_path: false }), sexp, yojson)]
@@ -48,6 +49,7 @@ module Model = {
4849 result: persistent. theorem |> EvalResult . Model . unpersist,
4950 },
5051 },
52+ write_out_steps: spec. write_out_steps,
5153 };
5254 };
5355
@@ -61,6 +63,7 @@ module Model = {
6163 lemmas: CellEditor . Model . mk(Editor . Model . mk(spec. lemmas)),
6264 theorem: CellEditor . Model . mk(Editor . Model . mk(spec. theorem)),
6365 },
66+ write_out_steps: spec. write_out_steps,
6467 };
6568 };
6669
@@ -72,6 +75,7 @@ module Model = {
7275 prelude: model. cells. prelude. editor. editor. state. zipper,
7376 lemmas: model. cells. lemmas. editor. editor. state. zipper,
7477 theorem: model. cells. theorem. editor. editor. state. zipper,
78+ write_out_steps: model. write_out_steps,
7579 };
7680 };
7781
@@ -83,18 +87,46 @@ module Model = {
8387 };
8488};
8589
90+ let override_core_settings =
91+ (settings: Language . CoreSettings . t , model: Model . t ) => {
92+ {
93+ ... settings,
94+ evaluation: {
95+ ... settings.evaluation,
96+ write_out_steps:
97+ model. write_out_steps || settings. evaluation. write_out_steps,
98+ },
99+ };
100+ };
101+
102+ let override_settings = (settings: Settings . t , model: Model . t ) => {
103+ {
104+ ... settings,
105+ core: override_core_settings(settings. core, model),
106+ };
107+ };
108+
109+ let override_globals = (globals: Globals . t , model: Model . t ) => {
110+ {
111+ ... globals,
112+ settings: override_settings(globals. settings, model),
113+ };
114+ };
115+
86116module Update = {
87117 open Updated ;
88118
89119 [@ deriving (show({with_path: false }), sexp, yojson)]
90120 type t =
91121 | UpdateTitle (string )
92122 | UpdatePrompt (string )
123+ | ToggleWriteOutSteps
93124 | Prelude (CellEditor . Update . t )
94125 | Lemmas (CellEditor . Update . t )
95126 | Theorem (CellEditor . Update . t );
96127
97128 let update = (~settings: Settings . t , action: t , model: Model . t ) => {
129+ let settings = override_settings(settings, model);
98130 switch (action) {
99131 | UpdateTitle (new_title ) when settings. instructor_mode =>
100132 Updated . return({
@@ -112,6 +144,14 @@ module Update = {
112144 | UpdatePrompt (_ ) =>
113145 print_endline("Instructor-only action" );
114146 Updated . return_quiet(model);
147+ | ToggleWriteOutSteps when settings. instructor_mode =>
148+ Updated . return({
149+ ... model,
150+ write_out_steps: ! model. write_out_steps,
151+ })
152+ | ToggleWriteOutSteps =>
153+ print_endline("Instructor-only action" );
154+ Updated . return_quiet(model);
115155 | Prelude (action ) when settings. instructor_mode =>
116156 let * new_cell =
117157 CellEditor . Update . update (~settings , action , model .cells .prelude );
@@ -199,6 +239,7 @@ module Update = {
199239 switch (action) {
200240 | UpdateTitle (_ ) => true
201241 | UpdatePrompt (_ ) => true
242+ | ToggleWriteOutSteps => true
202243 | Prelude (action ) => CellEditor . Update . can_undo(action)
203244 | Lemmas (action ) => CellEditor . Update . can_undo(action)
204245 | Theorem (action ) => CellEditor . Update . can_undo(action)
@@ -207,6 +248,7 @@ module Update = {
207248
208249 let calculate =
209250 (~settings, ~is_edited, ~schedule_action, model: Model . t ): Model . t => {
251+ let settings = override_core_settings(settings, model);
210252 // Work out the terms
211253 let just_prelude_term =
212254 MakeTerm . from_zip_for_sem(
@@ -441,6 +483,7 @@ module View = {
441483 ~selection: option (Selection . t ),
442484 model: Model . t ,
443485 ) => {
486+ let globals = override_globals(globals, model);
444487 let title_view =
445488 CellCommon . simple_cell_view([
446489 div(
@@ -471,6 +514,16 @@ module View = {
471514 ),
472515 ] );
473516
517+ let write_out_steps_view =
518+ CellCommon . simple_cell_view([
519+ text("Force writing out proof steps:" ),
520+ Widgets . toggle_named("" , model. write_out_steps, _ =>
521+ inject(Update . ToggleWriteOutSteps )
522+ ),
523+ ] );
524+ let write_out_steps_view =
525+ globals. settings. instructor_mode ? [ write_out_steps_view] : [] ;
526+
474527 let prompt_view =
475528 CellCommon . simple_cell_view([
476529 globals. settings. instructor_mode
@@ -542,13 +595,8 @@ module View = {
542595 |> Option . value(~default= (Float . nan, Float . nan)),
543596 );
544597
545- [
546- score_view,
547- title_view,
548- prompt_view,
549- prelude_view,
550- lemmas_view,
551- theorem_view,
552- ] ;
598+ [ score_view, title_view]
599+ @ write_out_steps_view
600+ @ [ prompt_view, prelude_view, lemmas_view, theorem_view] ;
553601 };
554602};
0 commit comments