2013-05-14 91 views
1

這個簡單的功能F#類型信息

let s = 
    function 
    | [] -> [[]] 
    | list -> []::list 

具有類型( '一個列表列表 - >' 列表列表)。因此,由於'a是泛型的,它接受任意深度的列表作爲參數。我的問題是,我總是需要指定輸入列表的深度,否則F#交互會抱怨。例如

s [] 

將無法​​正常工作,而

s ([]: int List List) 

意志。同樣,

s [[[]]] 

不會工作,但

s ([[[]]]:int List List List) 

一樣。 所以,這只是一個例子,有沒有什麼辦法可以避免這種明顯的輸入?

謝謝

+1

[F#獲取列表並顛倒所有子列表]的可能重複(http://stackoverflow.com/questions/16705131/f-take-a-list-of-lists-and-reverse-所有子列表) – 2013-05-23 12:24:59

回答

0

這是問題所在。什麼是

s [[[]]] 

它是't list list。由於一些底層的.NET限制,這樣的值不能存在。您需要製作't混凝土。

有很多關於F#值限制的優秀教程,最好的解決方案是稍後在相同的文件中使用您的結果,或者提供其他推理方法來提供具體類型。

+1

這實際上與.NET限制沒有任何關係 - 支持泛型值和變異基本上是不安全的。 – kvb 2013-05-23 15:30:49