Ответ 1
'a
означает "любой тип", а ''a
означает "любой тип, который можно сравнить для равенства". Поскольку ваша функция alreadyVisited
сравнивалась с x
и v
с помощью =
, x
и v
должна иметь тип, который поддерживает их сравнение для равенства, поэтому вы получаете тип ''a
.
Предупреждение означает, что вы сравниваете два значения с полиморфным типом для равенства.
Почему это вызывает предупреждение? Потому что он менее эффективен, чем сравнение двух значений известных типов для равенства.
Как вы избавитесь от предупреждения? Изменяя свою функцию только для работы с определенным типом, а не с любым типом.
Если вы заботитесь о предупреждении? Возможно нет. В большинстве случаев я бы сказал, что наличие функции, которая может работать для любого типа, важнее, чем использование самого эффективного кода, поэтому я просто проигнорирую это предупреждение.