隐式参数

可以省略类型检查器可以自己找出的术语,替换为_。如果类型检查器无法推断_它将报告错误。例如,对于多态身份功能

 id:(A:设置)->A->A

第一个参数可以从第二个参数的类型,所以我们可以写id _零对于身份函数在.

隐式函数空间用花括号而不是括号书写。例如,

_==_:{A:Set}->A->A->Set子集:{A:Set}(C:A->Set){xy:A}->x==y->Cx->Cy

注意第一个参数如何_==_保留为隐式。同样,我们也可以去掉隐式参数A类,x个、和在的应用程序中子集。要显式给出隐式参数,请用卷曲括起来支撑。以下两个表达式等效:

subst C eq cx子集{_}C{_}{_}eq cx

值得注意的是,隐式参数也将插入到应用程序,因此以下内容等效:

子C子集C{_}{_}

获取type的函数{xy:A}->x==y->Cx->Cy我们必须明确抽象结束x个:

\{x} {y}->子集C

隐式参数也可以通过名称引用,因此如果我们想给表达e(电子)显式用于没有给出值x个我们可以写

子集C{y=e}eq cx

构造隐式函数空间时,可以省略隐式参数,所以下面的两个表达式都是有效的类型表达式{A:集合}->A->A:

\{A} x->x\x->x

对于函数空间何时可以隐式,没有任何限制。在内部,显式和隐式函数空间的处理方式相同。这意味着无法保证隐式参数会得到解决。当存在未解决的隐式参数时,类型检查器将给出错误指示哪个应用程序包含未解决的参数的消息。这种对隐式论证的自由方法的原因是限制了在我们保证问题得到解决的情况下使用隐式论证在实践中排除了许多有用的案例。

页面上次修改时间:2011年11月17日下午03:09
技术支持私人维基