基本上,我想要一个函数来返回一个多态函数,有点像这样:
fun foo()= fn x => x
因此foo函数接受unit类型的值并返回多态标识函数 并且编译器很满意,它给了我:
val foo = fn:unit - > 'a - > 'a
但是一旦我实际调用foo函数,返回值就不是我预期的
val it = fn:?。X1 - > ?.X2
由于价值限制而无法概括,它说,有什么帮助吗?提前谢谢
答案 0 :(得分:4)
由于技术原因,您不允许概括(即,使多态)函数调用的结果。调用的结果必须具有单形类型。如果不是这种情况,你可以通过以下肮脏技巧破坏类型系统:
ref []
并返回forall 'a . 'a list ref
你就是:你现在正在执行任意字符串的内容作为代码。不好。
通过坚持ref []
返回的值是单态的,您可以确保它可以用作字符串列表或函数列表,但不能同时用作两者。所以这是我们为类型安全支付的价格的一部分。