4

基本上,我想要一个函数来返回一个多态函数,如下所示:

有趣的 foo () = fn x => x

所以 foo 函数接受一个 unit 类型的值并返回一个多态恒等函数,编译器对此很满意,它给了我:

val foo = fn : 单位 -> 'a -> 'a

但是一旦我真正调用了 foo 函数,返回值并不是我所期望的

val it = fn : ?.X1 -> ?.X2

由于它说的价值限制,无法概括,有什么帮助吗?提前致谢

4

1 回答 1

5

出于技术原因,不允许对函数调用的结果进行概括(即多态化)。调用的结果必须具有单态类型。如果不是这种情况,您可以通过以下肮脏的技巧来颠覆类型系统:

  1. 调用ref []并取回类型列表forall 'a . 'a list ref
  2. 插入一个字符串。
  3. 删除一个函数

你就在那里:你现在正在将任意字符串的内容作为代码执行。不好。

通过坚持返回的值ref []是单态的,您可以确保它可以用作字符串列表或函数列表,但不能同时用作两者。所以这是我们为类型安全付出的一部分代价。

于 2010-01-28T23:11:57.840 回答