2013-05-14 92 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