Grundlegendes zu Fehlern bei der F # -Werteinschränkung

Ich verstehe nicht, wie die Wertebeschränkung in F # funktioniert. Ich habe die Erklärung in der gelesenwiki ebenso wieMSDN-Dokumentation. Was ich nicht verstehe ist:

Warum erhalte ich zum Beispiel einen Werteinschränkungsfehler?diese Frage):

let toleq (e:float<_>) a b = (abs ( a - b ) ) < e

Aber das tut es nicht:

let toleq e (a:float<_>) b = (abs ( a - b ) ) < e

Dies ist alles in Ordnung verallgemeinert ...

let is_bigger a b = a < b

aber das ist nicht (es wird als int angegeben):

let add a b = a + b

Warum erzeugen Funktionen mit impliziten Parametern eine Wertebeschränkung:

diese:

let item_count = List.fold (fun acc _ -> 1 + acc) 0

gegen diese:

let item_count l = List.fold (fun acc _ -> 1 + acc) 0 l

(Wenn ich diese Funktion in einem Codefragment verwende, ist der VR-Fehler nicht mehr vorhanden, aber die Funktion wird auf den Typ festgelegt, für den ich sie verwendet habe, und ich möchte, dass sie verallgemeinert wird.)

Wie funktioniert es?

(Ich verwende die neueste F #, v1.9.6.16)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage