Erreur de compilation F # FS0030, problèmes avec la restriction de valeur
-
03-07-2019 - |
Question
J'ai lu le texte de présentation à l'adresse StrangeLights , J'ai lu le passage d'Expert. F # (page 119), mais je ne vois pas comment ils s'appliquent à mon code:
Pour mes tests, je souhaite vérifier l’égalité entre les flottants, avec un peu de tolérance. Je convertis tout en unités de mesure, mais je veux pouvoir être «générique»:
let toleq (e:float<_>) a b = (abs ( a - b ) ) < e
Je peux ensuite l'utiliser pour vérifier l'égalité sur différents "types" de float, ou la modifier pour en faire un personnalisé:
toleqm = toleq 1.0e-10<m>
Mais je reçois le message suivant:
Type inference has inferred the signature
val toleq : float<'u> -> float<'u> -> float<'u> -> bool
Either define 'toleq' as a simple data term, make it a function, or add a
type constraint to instantiate the type parameters.
Je ne vois pas comment je pourrais faire plus pour en faire une fonction - je ne vois aucun paramètre implicite.
Quoi de neuf?
La solution
Eh bien, j'ai déconné un peu et trouvé la solution, désespérée, mais je ne suis pas sûr de comprendre pourquoi ...
let toleq (e:float<_>) (a:float<_>) (b:float<_>) = (abs ( a - b ) ) < e
Ugh, il est presque aussi moche que les déclarations génériques en C #.