在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
答案 0 :(得分:4)
非重载构造函数是可推导的,因此推断出[]
的类型,但重载的构造函数只能是可检查的,因此您无法推断类型true ∷ []
- 只能对{List₂ Bool A
进行检查{1}}。
否则,重载构造函数的类型定向解析会过于复杂。例如。 _∷_
的第二个参数的类型可能取决于它的第一个参数,然后确定_∷_
是属于List₁
还是List₂
需要解决两个可能非平凡的统一问题(一个用于List₁
,一个用于List₂
)可能会被推迟并保留在内存中,直到明确用户的_∷_
为止。 Agda已经产生了很多元变量,我没有看到任何增加这个数字的理由,并且使类型检查变得复杂,以包含这个非常有用的功能。