Ocaml: Error - это выражение имеет тип x, но используется с типом x

Это моя ошибка:

Error: This expression has type nfa but is here used with type nfa

Что может случиться, чтобы вызвать это? Я использую emacs tuareg и загружаю оценочные файлы один за другим. Иногда это случается, а иногда нет.

2 ответа

Решение

Хорошее описание этого есть в руководстве по ocaml. То, что произошло, это то, что вы затеняли определение типа новым определением:

type nfa = int
let f (x: nfa) = x

type nfa = int
let g (x: nfa) = x

Перезапуск верхнего уровня очистит старые определения.

Обновить:

Начиная с OCaml 4.01.0 (выпущена в сентябре 2013 г.), общая проблема та же, но сообщение об ошибке добавляет число к определению типа, чтобы показать, что типы внутренне различны.

Полный пример из старого FAQ по OCaml на верхнем уровне:

type counter = Counter of int;; (* define a type *)
type counter = Counter of int
# let x = Counter 1;;           (* use the new type *)
val x : counter = Counter 1
type counter = Counter of int;; (* redefine the type, use it *)
type counter = Counter of int
# let incr_counter c = match c with Counter x -> Counter (x + 1);;
val incr_counter : counter -> counter = <fun>
# incr_counter x;;              (* now mix old and new defs *)
Error: This expression has type counter/1029
       but an expression was expected of type counter/1032
# 
Другие вопросы по тегам