idris - 如何显式提供隐式参数?

标签 idris

假设我有一个带有此签名的函数:

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 ,但我不知道如何做到这一点。如何显式传递隐式证明参数以便编译?

最佳答案

您可以通过将隐式参数括在大括号中并以参数名称作为前缀来为隐式参数提供显式参数,例如 {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}

关于idris - 如何显式提供隐式参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909267/

相关文章:

idris - 如何创建一个只接受其他字段的字段?

dependent-type - 为什么不涉及 "mod"的相等性不在 Idris 中进行类型检查?

idris - 我可以在 Idris 中定义 x==y = p(x) == p(y) 的一般概念吗?

idris 糊状战术

idris - 在 Refl 中使用重写

functional-programming - 所以 : what's the point?

idris - 在 Idris 中生成库而不是可执行文件?

pretty-print - 了解 Wadler 的 Prettier 打印机的性能特点

scala - 来自 Idris -> Scala 的 StringOrInt?

idris - 是否可以在 Idris 中对种类进行抽象?