![](/img/trans.png)
[英]Haskell typeclass constraint cannot be resolved due to Paterson's conditions
[英]The Paterson Conditions for Type Checking in Haskell
有人可以解释(或给我一些例子或过程)为什么这些条件对于终止 Haskell 中的实例解析过程是必要的? 或者至少是描述该算法的链接。
例如,我试图找到一些关于它的讲座,但我只能找到关于类型推断的东西,而不是这个实例解析过程。
我引用了Haskell 用户指南
规则是这些:
- Paterson 条件:对于上下文中的每个类约束
(C t1 ... tn)
- 没有类型变量在约束中出现的次数比在头部中多
- 约束的构造函数和变量(放在一起并计算重复次数)比头部少
- 约束没有提到类型函数。 类型函数应用程序原则上可以扩展为任意大小的类型,因此会被一手拒绝
- 承保条件。 对于类的每个函数依赖,
⟨tvs⟩left -> ⟨tvs⟩
right,S(⟨tvs⟩right)
每个类型变量都必须出现在S(⟨tvs⟩left)
,其中S
是每个类型的替换映射类声明中的变量到实例头中的相应类型。
所谓的“帕特森条件”,用于保证实例解析在FlexibleInstances
扩展下终止,在通过约束处理规则理解函数依赖一文的第 5 章中有完整的记录。 不幸的是,讨论非常技术性和密集。
我们可以做一些更温和的解释,以直观地了解哪些情况是合法的; 一段时间以来,我一直试图解决这个问题,但没有成功。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.