Idris - 在函数内部使用隐式变量

时间:2014-10-10 20:19:21

标签: idris

我们如何在函数内部使用隐式变量?减少到最简单的情况,是否可以:

dim : Vect n a -> Nat
dim vec = n

没有收到错误:

When elaborating right hand side of rep:
No such variable n

有没有办法从里面访问这些值?或者与在n内询问sin n一样?

在这种情况下,是否可以证明Vect是"双射"并从那里恢复变量?

1 个答案:

答案 0 :(得分:6)

实际上没有这样的变量n,因为它不受模式匹配的约束。

您需要在范围中明确引入隐式变量:

dim : Vect n a -> Nat
dim {n} vec = n

可以在idris REPL中查看它们:

*> :set showimplicits
*> :t dim 
Main.dim : {n : Prelude.Nat.Nat} -> {a : Type} ->
     (__pi_arg : Prelude.Vect.Vect n a) -> Prelude.Nat.Nat