Предположим, у вас есть объявление с выведенной типа:назвать выведенный тип в OCaml
let f x y = x +. y
Теперь, если вы используете этот тип в какой-либо другой выведенной типа:
let g h x = (if x > 0. then h else f) x x
Вы, очевидно, есть тип-идентификатор между h
и f
. Если, однако, тип f
усложняется, и вы все еще хотите, чтобы это было сделано (например, вы создаете код), тип g
легко становится нечитаемым.
Есть ли способ представить декларацию типа в виде:
type mytype = <type of the function f above>
И есть проверки типов клюшки к нему, то есть в приведенном выше примере, он должен дать:
val g : mytype -> float -> float
Нет. Нет способа определить синоним типа, как тип выражения. Вам нужно явно указать тип. Почему это проблема для вас? Что вы на самом деле пытаетесь сделать? Я подозреваю, что это проблема [XY] (http://xyproblem.info/). –
Проблема в том, что я действительно генерирую код с довольно сложным типом. Я полагаюсь на проверку типа Ocaml (и свойство эквивалентности оригинала и сгенерированного кода), чтобы доказать тип безопасности исходного кода. Из-за сложности предполагаемых типов сообщения об ошибках вряд ли читабельны (и я также подозреваю, что это влияет на производительность). Определение типа я бы означало реализовать вывод типа для исходного кода, который я стараюсь избегать. – choeger