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