发生这种错误通常是因为在类型检查期间使用了变量绑定,如下所示:
foo : (x : Nat) -> Bool
foo zero = true
foo _ = false
在第二个模式中, _
是一个变量,如果匹配到一个非零自然数,Agda就会尝试使用 _
来对其进行绑定,这样在类型检查期间就会发生错误。 为解决这个问题,我们可以将变量绑定替换为模式匹配,如下所示:
foo : (x : Nat) -> Bool
foo zero = true
foo (suc _) = false
这将避免需要使用变量绑定来进行类型检查,从而解决了这个问题。