Хотелось бы узнать, в Окамле, есть ли частичная информация о наборе текста. может быть нарисован некоторыми существующими функциями верхнего уровня / компилятора для программы, которая не компилируется? Позволь мне объяснить.
Хорошо известно, что в Ocaml выводимый тип можно получить с помощью файла -annot. Однако иногда у нас есть фрагмент кода, который не компилируется из-за некоторой ошибки при наборе. Выдает ошибку, экспортированную на верхний уровень, этого шаблона
"This expression has type A, but was expected type B"
Искусственный пример будет
# let x =
let y = 5 in
not y;;
Characters 32-33:
not y;;
^
Error: This expression has type int
but an expression was expected of type bool
Программист этого куска кода должен хорошо понимать 2-ю часть этого сообщения, т.е.
"у ожидается тип bool" из-за части "не у". Тем не менее, ей / ей может быть трудно понять первую часть этого сообщения об ошибке: как это «y» подразумевает тип «int»? Таким образом, было бы интересно иметь частичный набор предполагаемых типов, прежде чем возникнут конфликты типов. Для приведенного выше примера хотелось бы, чтобы интерпретатор сказал, что первое «y» (из «let y = 5») имеет тип int, по которому я буду знать причину, по которой второе «y» (из «not y») ) относится к типу int.
Не могли бы вы сказать, предоставляется ли описанная функциональность некоторым интерпретатором / компилятором ocaml?
В общем, мой вопрос таков: может ли ocaml toplevel или его интерпретатор выдавать частично выведенные типы, которые пользователь может извлечь для более эффективного поиска источника их ошибки при печати?
Этот вопрос может не иметь смысла из-за неединственности частично выведенной аннотации типа. Однако пример примера должен показать, что, по крайней мере, для некоторых случаев и некоторых частично выведенных типов его использование.
Спасибо за ваши идеи.