这个简单的函数
let s =
function
| [] -> [[]]
| list -> []::list
具有类型('a List List -> 'a List List)。因此,由于'a是泛型的,它接受任意深度的列表作为参数。我的问题是,我总是必须指定输入列表的深度,否则f#交互将会抱怨。例如
s []
不能工作
s ([]: int List List)
。类似地,
s [[[]]]
不能工作,但是
s ([[[]]]:int List List List)
。那么,这只是一个例子,有没有什么方法可以避免这种显式类型呢?
谢谢
问题在这里。
是什么类型?s [[[]]]
为't list list
。由于一些潜在的。net限制,这样的值不能存在。你需要使't
成为混凝土。
有许多关于f#值限制的优秀教程,最好的解决方案是稍后在同一文件中使用您的结果,或者提供一些其他方法来进行推断,以提供具体类型。