类型如何满足执行映射操作所需的签名?

时间:2016-01-11 13:10:46

标签: f#

有人可以向我解释以下行是如何编译的吗?

[1 .. 10] |> List.map string

我希望以下函数签名位于字符串的位置。

(' T - >' U) - > ' T列表 - > ' U列表

我按以下方式阅读了上述签名:

List.map将函数作为输入(即(' T - >' U))并产生另一个函数作为输出(即' T list - >' U list)。

那么类型"字符串&#34>如何?满足执行地图操作所需的签名?

注:

我在学习F#的两个月里。另请注意,我是LOB开发人员而非计算机科学家。

2 个答案:

答案 0 :(得分:3)

在Core.Operators(https://msdn.microsoft.com/en-us/library/ee353754.aspx)中,您定义了多个转换函数。一个是:

string : ^T -> string

您可以使用显式lambda

来调用它
[1 .. 10] |> List.map (fun i -> string i)

请注意,lambda fun i -> string iint -> string类型的函数,因此我们可以省略lambda并直接引用该函数。

[1 .. 10] |> List.map (string)

答案 1 :(得分:1)

在您的情况下,string是一个类似obj.ToString()

的函数
let f = string
// FSI:
// val f : (obj -> string)

字符串签名定义为

string : ^T -> string  

其中^ T是静态解析(编译时通用)类型参数。