Предупреждение SML: Тип Vars не обобщен при использовании пустых списков или опции NONE
Я могу't на всю жизнь выясните, почему следующая функция SML выдает предупреждение в моей задаче:
fun my_func f ls =
case ls of
[] => raise MyException
| head :: rest => case f head of
SOME v => v
| NONE => my_func f rest
fun f a = if isSome a then a else NONE;
Всякий раз, когда я вызываю my_func со следующими тестовыми функциями:
my_func f [NONE, NONE];
my_func f [];
Я всегда получаю предупреждение:
Предупреждение: переменные типов, не обобщенные из-за ограничения значений, создаются для фиктивных типов (X1, X2, ...)
Всякий раз, когда я передаю список опций, содержащий хотя бы одно НЕКОТОРОЕ значение, это предупреждение не выдается. Я знаю, что это должно быть связано с тем фактом, что я использую полиморфизм в своей функции карри, но яЯ был полностью застрял в том, как избавиться от этих предупреждений.
Пожалуйста, помогите, если у вас есть идеи - заранее спасибо!