SML-Warnung: Geben Sie Vars ein, das bei Verwendung der Option Leere Listen oder KEINE nicht verallgemeinert ist

Ich kann nicht für das Leben von mir herausfinden, warum die folgende SML-Funktion eine Warnung in meinem Hausaufgabenproblem auslöst:

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;

Immer wenn ich my_func mit folgenden Testfunktionen aufrufe:

my_func f [NONE, NONE];
my_func f [];

Ich bekomme immer die Warnung:

Warnung: Typvariablen, die aufgrund von Werteinschränkungen nicht verallgemeinert wurden, werden auf Dummy-Typen (X1, X2, ...) instanziiert.

Immer wenn ich eine Optionsliste mit mindestens einem SOME-Wert übergebe, wird diese Warnung nicht ausgegeben. Ich weiß, dass es etwas mit der Tatsache zu tun haben muss, dass ich in meinem Funktionscurrying Polymorphismus verwende, aber ich bin völlig festgefahren, wie ich diese Warnungen loswerden kann.

Bitte helfen Sie mit, wenn Sie Ideen haben - vielen Dank im Voraus!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage