繁体   English   中英

Haskell 中类型检查的 Paterson 条件

[英]The Paterson Conditions for Type Checking in Haskell

有人可以解释(或给我一些例子或过程)为什么这些条件对于终止 Haskell 中的实例解析过程是必要的? 或者至少是描述该算法的链接。

例如,我试图找到一些关于它的讲座,但我只能找到关于类型推断的东西,而不是这个实例解析过程。

我引用了Haskell 用户指南

规则是这些:

  1. Paterson 条件:对于上下文中的每个类约束(C t1 ... tn)
    1. 没有类型变量在约束中出现的次数比在头部中多
    2. 约束的构造函数和变量(放在一起并计算重复次数)比头部少
    3. 约束没有提到类型函数。 类型函数应用程序原则上可以扩展为任意大小的类型,因此会被一手拒绝
  2. 承保条件。 对于类的每个函数依赖, ⟨tvs⟩left -> ⟨tvs⟩ right, S(⟨tvs⟩right)每个类型变量都必须出现在S(⟨tvs⟩left) ,其中S是每个类型的替换映射类声明中的变量到实例头中的相应类型。

所谓的“帕特森条件”,用于保证实例解析在FlexibleInstances扩展下终止,在通过约束处理规则理解函数依赖一文的第 5 章中有完整的记录。 不幸的是,讨论非常技术性和密集。

我们可以做一些更温和的解释,以直观地了解哪些情况是合法的; 一段时间以来,我一直试图解决这个问题,但没有成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM