使用多态方法的记录是否排名1?

问题描述

据我了解:

  • OCaml使用1级多态性
  • 在1级多态性中,所有量词必须位于最外面的位置(前缘)

但是可以键入以下内容

type 'a myArray = { map : 'b. ('a -> 'b) -> 'b myArray; }

嵌套类型量词'b的位置。实际上,这是can be used to simulate higher rank polymorphism in OCaml)。

在这种情况下,秩1多态性中是否可以有嵌套类型量词?类型系统仍然是可预测的,即可以进行完整类型推断吗?

解决方法

由于类型为myArray的类型推断仍然可能,因此可以提示类型推断。

类型检查器一看到map字段,便知道使用'a myArray,因此确切地知道了量词应该在哪里。

以某种方式,因为记录是命名的并且具有类型定义,所以无需推断类型定义中必须包含的内容。请注意,对于元组来说,这是不可能的,因为它们不依赖外部定义并且可以完全推断。