Предупреждение SML: Тип Vars не обобщен при использовании пустых списков или опции NONE

Я не могу понять, почему следующая функция 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, ...)

Всякий раз, когда я передаю список опций, содержащий хотя бы одно НЕКОТОРОЕ значение, это предупреждение не выдается. Я знаю, что это должно быть связано с тем фактом, что я использую полиморфизм в своей функции каррирования, но я полностью застрял в том, как избавиться от этих предупреждений.

Пожалуйста, помогите, если у вас есть идеи - заранее спасибо!

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

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