agda - 未找到相互列表的表达式类型

时间:2017-01-14 08:03:34

标签: agda

在Windows上的Agda 2.5.1.1中,在加载下面的代码之后(它对应于教程https://github.com/k0001/tut-agda/blob/master/SetsParametric.agda),Cc Cd类型检查确实找到{{1}的类型List₁ _A_2 _B_3表达式,但对于[]这样的结构化表达式没有合理的类型,只返回下划线和数字,如true ∷ []。请问有什么想法可以吗?

本教程的前几个练习效果很好。

_5

1 个答案:

答案 0 :(得分:4)

非重载构造函数是可推导的,因此推断出[]的类型,但重载的构造函数只能是可检查的,因此您无法推断类型true ∷ [] - 只能对{List₂ Bool A进行检查{1}}。

否则,重载构造函数的类型定向解析会过于复杂。例如。 _∷_的第二个参数的类型可能取决于它的第一个参数,然后确定_∷_是属于List₁还是List₂需要解决两个可能非平凡的统一问题(一个用于List₁,一个用于List₂)可能会被推迟并保留在内存中,直到明确用户的_∷_为止。 Agda已经产生了很多元变量,我没有看到任何增加这个数字的理由,并且使类型检查变得复杂,以包含这个非常有用的功能。

相关问题