使用operator(*)时如何防止类型推断选择`int`

Duc*_*tro 0 f# type-inference inline

我正在尝试定义以下函数(在Seq模块名称中共享空间).

module Seq =

    let scale value sequence = 
        sequence 
        |> Seq.map (fun v -> v * value)
Run Code Online (Sandbox Code Playgroud)

然而,类型推断强加元素和值是类型int.我希望这个方法可以处理整数(8位,16位等),浮点数(单和双)等.

为什么类型推断会跳转到int,以及如何使此函数更通用?

Tom*_*cek 5

对于正常的函数声明,F#不会让你编写一个数字类型的泛型函数(.NET中的泛型约束不能表达诸如"has*operator"之类的约束)

但是,如果将其标记为F#,将允许您编写通用数值函数inline.在这种情况下,它会在您调用函数时内联函数并将代码专门化为特定类型(类型系统将使用静态成员约束来表达需求).

let inline scale value sequence = 
    sequence 
    |> Seq.map (fun v -> v * value)
Run Code Online (Sandbox Code Playgroud)

您可以在我前一段时间写的博客文章中找到更多信息.