Zrozumienie błędów ograniczenia wartości F #
Nie rozumiem, jak działa ograniczenie wartości w F #. Przeczytałem wyjaśnienie wwiki tak dobrze jakDokumentacja MSDN. Nie rozumiem:
Dlaczego, na przykład, daje mi to błąd ograniczenia wartości (zaczerpnięty zto pytanie):
let toleq (e:float<_>) a b = (abs ( a - b ) ) < e
Ale to nie:
let toleq e (a:float<_>) b = (abs ( a - b ) ) < e
To jest uogólnione dobrze ...
let is_bigger a b = a < b
ale to nie jest (jest określone jako int):
let add a b = a + b
Dlaczego funkcje z niejawnymi parametrami generują ograniczenie wartości:
to:
let item_count = List.fold (fun acc _ -> 1 + acc) 0
vs to:
let item_count l = List.fold (fun acc _ -> 1 + acc) 0 l
(Pamiętaj, że jeśli użyję tej funkcji w fragmencie kodu, błąd VR zniknie, ale wtedy funkcja zostanie określona dla typu, dla którego ją użyłem i chcę, aby została uogólniona)
Jak to działa?
(Używam najnowszego F #, v1.9.6.16)