中文

类型类世界的一致性状态

编程语言 2025-03-03 v1

摘要

类型类是实现无损效率的通用算法和数据结构的流行工具,弥合了参数多态性和 ad-hoc 多态性之间的差距。自 Haskell 起其开发以来,类型类现在在诸多其他行业就绪编程语言中占据重要位置,包括 Swift、Rust 和 Scala。类型类的成功在很大程度上依赖于编译器通过类型导向解析推断隐式参数值的能力。这种技术有时被称为 **隐式编程**,允许用户省略信息,语言实现可从上下文中推断出,如特定类型类的实现。隐式编程的一个缺点是,类型导向解析可能产生歧义结果,从而威胁到一致性,即有效程序恰好有一个含义。此问题在社区中关于如何解决的观点存在分歧。一派主张在隐式解析具有上下文敏感性的灵活性方面,往往依赖于依赖类型特征来维持严谨性。另一派认为,上下文不应妨碍等式推理,通常要求类型类实例在整个程序中唯一,以防止歧义。尽管存在关于类型类和隐式编程的大量工作,但大多数学术文献聚焦于少数几个语言,为其他主流项目提供很少的见解。与此同时,后者在不同名称下演化出类似的功能和/或限制,使语言用户和设计者难以把握完整的设计空间。为缓解此问题,我们调查了三种广受欢迎的语言:Swift、Rust 和 Scala,这些语言在类型类方面发挥着重要作用,并将其在一致性方面的方法与 Haskell 的方法进行比较。值得注意的是,除了表面的语法差异之外,Swift、Rust 和 Haskell 在类型类实例唯一性的局限性方面实际上是惊人的相似的:这三种语言提供了类似的策略来克服这一限制。

关键词

引用

@article{arxiv.2502.20546,
  title  = {On the State of Coherence in the Land of Type Classes},
  author = {Dimi Racordon and Eugene Flesselle and Cao Nguyen Pham},
  journal= {arXiv preprint arXiv:2502.20546},
  year   = {2025}
}