20070711-1

以下定义类型检查:

模块MutualScopeBug,其中--相互的data Nat:设置位置z:国家s:国家->国家data Nat’:Nat->设置位置z':自然s':对于所有{n}->Nat'n->Nat'(s n)测试:Nat'z->Nat'z测试z'=z'

然而,如果我取消注释相互的然后我得到以下错误消息:

不在范围内:z在/Users/jmc/MutualScopeBug.agda:12,15-16当范围检查Nat'z时

这是因为构造函数不在定义它们的共同块中的类型签名的范围内。解决方法是定义同义词:

模块MutualScopeBug,其中相互的data Nat:设置位置z:国家s:自然->自然data Nat’:Nat->设置位置z':自然s':对于所有{n}->Nat'n->Nat'(s n)z1:自然z1=z测试:Nat'z1->Nat'z1测试z'=z'

我认为没有构造函数在作用域中的原因是允许提及在mutual块中进一步定义的函数(例如测试)在类型签名中施工人员。如果z(z)提到测试其类型和测试也提到过z(z)例如。不过,要定义同义词很难,我希望用更方便的方式处理这种情况。我建议您添加一个功能请求/北美

页面上次修改时间:2007年7月11日晚上10:27
技术支持私人维基