2013-06-27 132 views
2

如果我聲明此F#函數:F#類型推斷未命中

let extractColumn col (grid : List<Map<string, string>>) = 
    List.map (fun row -> row.[col]) grid 

編譯器會抱怨:

錯誤FS0752: 'EXPR [IDX]' 的操作者,已經在使用根據該計劃點之前的信息確定不確定類型的對象。考慮進一步增加類型約束

添加類型標註爲拉姆達的row參數修正它:

let extractColumn col (grid : List<Map<string, string>>) = 
    List.map (fun (row : Map<string, string>) -> row.[col]) grid 

爲什麼不能得到rowextractColumn函數的參數grid的類型?

回答

8

F#的類型推斷從左到右和從上到下工作。

grid的類型在List.map (fun row -> row.[col])部分不可用。

使用管道運營商|>

let extractColumn col (grid : Map<string, string> list) = 
    grid |> List.map (fun row -> row.[col]) 

讓您的例子正常工作。