Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
基本上,我想要一个函数来返回一个多态函数,如下所示:
有趣的 foo () = fn x => x
所以 foo 函数接受一个 unit 类型的值并返回一个多态恒等函数,编译器对此很满意,它给了我:
val foo = fn : 单位 -> 'a -> 'a
但是一旦我真正调用了 foo 函数,返回值并不是我所期望的
val it = fn : ?.X1 -> ?.X2
由于它说的价值限制,无法概括,有什么帮助吗?提前致谢
出于技术原因,不允许对函数调用的结果进行概括(即多态化)。调用的结果必须具有单态类型。如果不是这种情况,您可以通过以下肮脏的技巧来颠覆类型系统:
ref []
forall 'a . 'a list ref
你就在那里:你现在正在将任意字符串的内容作为代码执行。不好。
通过坚持返回的值ref []是单态的,您可以确保它可以用作字符串列表或函数列表,但不能同时用作两者。所以这是我们为类型安全付出的一部分代价。