声明一个接受带有泛型类型的元组参数的函数

时间:2012-09-26 18:02:13

标签: generics f#

这是我写的代码片段:

let Foo (a : (int * int) seq) =  ();;
val Foo : seq<int * int> -> unit

let inline Bar (a : (a' * int) seq) = ();;
let Bar (a : (a' * int) seq) =
--------------^^
stdin(8,15): error FS0039: The type 'a'' is not defined
>

我的意图是Bar应该是一个函数,我可以传递不同类型的元组,如(string * int)(float * int)。为什么我不能这样定义我的功能?

3 个答案:

答案 0 :(得分:4)

tick(')在type变量之前,而不在它之后(也就是说,你想使用'a,而不是a')。

此外,您不太可能需要在声明中使用inline

答案 1 :(得分:2)

使用&lt;&gt;可以使函数显式通用介绍泛型类型。

let Bar<'a> (a: ('a * int) seq) = ()

答案 2 :(得分:2)

你真的需要一个类型注释吗?这个更干净,类型相同:

let Bar a =
  for c, d in a do
    printfn "%A, %d" c d