polymorphism - 具有多态方法的记录是否排名 1?
问题描述
据我了解:
- OCaml 使用 rank 1 多态性
- 在等级 1 多态性中,所有量词必须位于最外层(前缀)位置
但是,可以键入以下内容:
type 'a myArray = { map : 'b. ('a -> 'b) -> 'b myArray; }
类型量词'b
嵌套的位置。事实上,这可以用来模拟 OCaml 中更高等级的多态性)。
那么在rank-1多态中是否可以存在嵌套类型量词,例如这种情况?并且类型系统仍然是可预测的,即完整的类型推断是可能的吗?
解决方案
类型推断仍然是可能的,因为myArray
被命名,为类型推断提供提示。
类型检查器看到一个字段的那一刻map
,它知道使用 a'a myArray
并因此确切地知道量词应该在哪里。
在某种程度上,因为记录被命名并且具有类型定义,所以无需推断类型定义中必须包含什么。请注意,这对于元组是不可能的,因为它们不依赖于外部定义并且是完全推断的。
推荐阅读
- swift - IOS Swift - 相机视图覆盖不应覆盖状态栏
- java - Selenium JAVA:如何在前端验证频繁变化的数据?
- excel - 基于条件的 COUNT 列,条件之一是最新日期
- javascript - 强制选择完整元素
- ios - 将字符串值复制到另一个字符串?
- php - Codeigniter - 使用不同的 SMTP 设置发送电子邮件
- javascript - 如何以编程方式设置 HTMLElement 的宽度?
- azure - 文本拆分认知技能在 UI 中不可见
- php - 如何显示(分层)我的文章创建(PHP,Yii2)的年月?
- python - Pymongo 为某些键指定唯一约束