make function work with all numeric types (int, fl

2019-01-20 13:43发布

this simple function:

let sum a b = a + b

will work only for int types

how to make it so that it would also work for float and long ?

标签: f#
2条回答
▲ chillily
2楼-- · 2019-01-20 13:55

Use inline:

let inline sum a b = a + b

UPDATE:

If you're interested in writing your own polymorphic numerical functions, you should use both inline and LanguagePrimitives module.

Here is a polymorphic cosine function from the thread 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
查看更多
淡お忘
3楼-- · 2019-01-20 14:02

The example function you give only works for int types because of type inference; the type inference mechanism will automatically infer int because it sees the addition. If you want to make the same function for float and long, you'd either do inline as Pad has said or you could do this:

let sumFloat (a:float) b = a + b

let sumLong (a:int64) b = a + b

But inline is the right mechanism to get the generic "any type that supports addition" behavior that you're looking for.

查看更多
登录 后发表回答