如何在 F# 中为 .NET 函数设置别名

How to Alias .NET functions in F#

所以在 F# 中,函数应该是第一个 class 公民,因为它是一种函数式编程语言并且可以被引用。

所以我可以做到这一点

    let double x = x * 2

    let times2 = double

现在 times2 是 double 的别名,并且具有相同的函数签名 整数 -> 整数

为什么我不能这样做来为 .NET 函数设置别名?

   let write = System.IO.File.WriteAllLines

如果我尝试这样做,它会认为我缺少一个参数,但实际上我并没有尝试调用该函数,而是试图为其设置别名。

The member or object constructor 'WriteAllLines' does not take 1 argument(s). An overload was found taking 2 arguments.

有没有办法为预定义的 .NET 函数添加别名?或者这不可能吗?

其实 System.IO.File.WriteAllLines 不是 F# 语法函数。它是一个静态成员,所以它可以(而且确实是)重载。然后编译器不知道要选择哪个重载,他只需要你的额外提示。

您可以提供参数:

let write x y = System.IO.File.WriteAllLines(x, y)

或一些类型注释:

let write  = System.IO.File.WriteAllLines : _ * _ -> _

解析为唯一重载。