Что означает предупреждение 40: эта запись ... содержит поля, которые не видны в текущей области видимости

Пожалуйста, рассмотрите следующий код:

module A =
  struct
    type r = { i : int; s: string }
  end

module B =
  struct
    type r = { i : int; s : string }
  end


let f (x : A.r) : B.r = match x with
    { i; s } -> { i = 2*i; s = "" }

Два модуля определяют одну и ту же запись. Функция f преобразует запись A в запись B. Предупреждение уже генерируется во время компиляции, но также отображается в интерактивном режиме. В ocaml cli кажется, что вызов f делает то, что нужно:

# let x = f { i = 5; s = "ab" };;
Characters 10-29:
  let x = f { i = 5; s = "ab" };;
            ^^^^^^^^^^^^^^^^^^^
Warning 40: this record of type Shadow.A.r contains fields that are 
not visible in the current scope: i s.
They will not be selected if the type becomes unknown.
val x : Shadow.B.r = {Shadow.B.i = 10; s = ""}

Я нашел запись в блоге наlexifi.com которая объясняет проблему и некоторые общиерешения, Что я не понимаю, так это фактическое сообщение об ошибке:

Что это значит, что тип становится неизвестным?Что это значит, когда поле не выбрано?И в результате двух вышеупомянутых: какие условия должны быть выполнены, чтобы игнорировать предупреждение?

Ответы на вопрос(1)

Ваш ответ на вопрос