我们如何在函数内部使用隐式变量?减少到最简单的情况,是否可以:
dim : Vect n a -> Nat
dim vec = n
没有收到错误:
When elaborating right hand side of rep:
No such variable n
有没有办法从里面访问这些值?或者与在n
内询问sin n
一样?
在这种情况下,是否可以证明Vect
是"双射"并从那里恢复变量?
答案 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