2012-09-26 47 views
1

這裏的元組參數的功能是我寫的代碼片段:聲明它接受一個泛型類型

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)。爲什麼我不能以這種方式定義我的功能?

+5

由於類型''了'不使用其他任何地方的功能,你可以使用通配符'_',讓類型檢查推斷出泛型類型:'讓內聯條(a:(_ * int)seq)=()' – pad

回答

4

蜱(')來的類型變量之前,而不是之後它(即您要使用'a,不a')。

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

2

您可以使用<>來顯式泛型函數來引入泛型類型。

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

你真的需要一個類型註釋嗎?這是更清潔和具有相同類型:

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