whi*_*ork 0 agda dependent-type
当我写下以下函数是agda时,
f : (A : Set) ? (a : A) ? ?
f ? n = n
Run Code Online (Sandbox Code Playgroud)
我希望错误说我没有指定所有情况.
相反,我收到此错误:
Type mismatch:
expected: ?
actual: ?
when checking that the expression n
has type ?
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
使用更新版本的Agda(我使用的是2.5.4),您会收到更多信息:
? !=< ? of type Set
(because one is a variable and one a defined identifier)
when checking that the expression n has type ?
Run Code Online (Sandbox Code Playgroud)
问题是函数定义的模式(在等号的左边)可以只包含构造函数,变量和点模式,但不能包含诸如?
.由于?
不是一个有效的模式,Agda假定(可能容易混淆)它是一个名为?
type 的新变量Set
,因此遮蔽了实际?
的自然数类型.现在错误是有道理的,因为n
(它是?
变量)的类型不等于预期的返回类型(这是?
自然数的类型).