假设我有一个带有此签名的函数:
myNatToFin : (m : Nat) -> (n : Nat) -> { auto p : n `GT` m } -> Fin n
我尝试在另一个函数的主体中像这个myNatToFin k (S k)
一样应用它,我得到错误:
Can't solve goal
GT (S k) k
所以,我相信我必须明确传递GT (S k) k
的证据,但我不知道如何做到这一点。如何显式传递隐式证明参数以便编译?
答案 0 :(得分:3)
您可以为隐式参数提供显式参数,方法是将它们括在大括号中,并使用参数名称作为前缀,如{p = someExpression foo}
。
完整示例:
import Data.Fin
myNatToFin : (m : Nat) -> (n : Nat) -> { auto p : n `GT` m } -> Fin n
myNatToFin m n = ?x -- See https://stackoverflow.com/questions/29908731/
lteRefl : LTE n n
lteRefl {n = Z} = LTEZero
lteRefl {n = S _} = LTESucc lteRefl
foo : (k : Nat) -> Fin (S k)
foo k = myNatToFin k (S k) {p = LTESucc lteRefl}