Каким должен быть тип вывода compute_formula
?При написании подписи функция должна иметь возможность вычислять элемент B
независимо от того, что такое B
.Поскольку это, очевидно, невозможно (что, если B
равно Empty
?), Я покажу вам другой подход.
Идея состоит в том, чтобы использовать formula
для получения типа вывода.
Definition output_type (f: formula) :=
match f with
| @Formula _ B _ _ _ => B
end.
Тогда мы можем определить compute_formula
как
Definition compute_formula (f: formula): output_type f :=
match f with
| @Formula _ _ t a func => func t a
end.
Несколько других вещей.Я не уверен, что вы имеете в виду под частью extraArg
.Если вы уточните, что это значит, я смогу вам помочь.Кроме того, нет (по крайней мере вне тактики) способа сделать то, что вы хотите, с помощью A isof type2
.