这个简单的功能:
let sum a b = a + b
仅适用于 int 类型
如何使它也适用于 float 和 long ?
使用内联:
let inline sum a b = a + b
更新:
如果您对编写自己的多态数值函数感兴趣,您应该同时使用inline和LanguagePrimitives模块。
这是来自线程Converting Haskell Polymorphic Cosine function to F#的多态余弦函数:
let inline cosine n (x: ^a) =
let one: ^a = LanguagePrimitives.GenericOne
Seq.initInfinite(fun i -> LanguagePrimitives.DivideByInt (- x*x) ((2*i+1)*(2*i+2)))
|> Seq.scan (*) one
|> Seq.take n
|> Seq.sum
由于类型推断,您提供的示例函数仅适用于 int 类型;类型推断机制将自动推断 int 因为它看到了加法。如果你想为 float 和 long 制作相同的函数,你可以像 Pad 所说的那样做 inline 或者你可以这样做:
let sumFloat (a:float) b = a + b
let sumLong (a:int64) b = a + b
但是内联是获得您正在寻找的通用“支持加法的任何类型”行为的正确机制。