F#编译器错误FS0030,值限制问题

F#编译器错误FS0030,值限制问题,f#,units-of-measurement,value-restriction,F#,Units Of Measurement,Value Restriction,我已经在,我已经阅读了专家F#的简介(第119页),但我看不出它们如何应用于我的代码: 对于我的测试,我想检查浮点之间的相等性,并带有一点容差。我正在将所有内容转换为度量单位,但我希望能够做到“通用”: let toleq (e:float<_>) a b = (abs ( a - b ) ) < e 让toleq(e:float)ab=(abs(a-b))

我已经在,我已经阅读了专家F#的简介(第119页),但我看不出它们如何应用于我的代码:

对于我的测试,我想检查浮点之间的相等性,并带有一点容差。我正在将所有内容转换为度量单位,但我希望能够做到“通用”:

let toleq (e:float<_>) a b = (abs ( a - b ) ) < e
让toleq(e:float)ab=(abs(a-b))
然后,我可以用它来检查不同“类型”的浮点的相等性,或者用它来定制一个:

toleqm = toleq 1.0e-10<m>
toleqm=toleq 1.0e-10
但我得到了以下信息:

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.
类型推断已推断出签名

val toleq:float->float嗯,我在绝望中搞砸了一点,找到了解决方案,但我不确定我是否理解为什么

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

呃,它几乎和C#中的泛型声明一样难看。

我无法在1.9.6.2中重现该错误消息,你能展示生成它的整个微型程序吗?没有微型程序,只是在FSI中尝试过,那一行给了我错误。交叉参考关于同一主题的另一个问题: