let process_flag (flag: flag) (apply: 'a apply_to_flag) : 'a =
match flag with
| Int flag_base -> apply.apply flag_base#as_flag_type
| Float flag_base -> apply.apply flag_base#as_flag_type
| Bool flag_base -> apply.apply flag_base#as_flag_type
| String flag_base -> apply.apply flag_base#as_flag_type
| Unit flag_base -> apply.apply flag_base#as_flag_type
| Equality flag_base -> apply.apply flag_base#as_flag_type
| Backtracking flag_base -> apply.apply flag_base#as_flag_type
| IterativeDeepening flag_base -> apply.apply flag_base#as_flag_type
| Restart flag_base -> apply.apply flag_base#as_flag_type
| HornCandidates flag_base -> apply.apply flag_base#as_flag_type
| Lemma flag_base -> apply.apply flag_base#as_flag_type
| PreprocessSplit flag_base -> apply.apply flag_base#as_flag_type
| InputFormat flag_base -> apply.apply flag_base#as_flag_type
| PrintFDProblem flag_base -> apply.apply flag_base#as_flag_type