Cactus продемонстрировал, как ответить на мой вопрос: Вспомогательная функция для определения, если Nat` mod` 5 == 0.
Он написал:
onlyModBy5 : (n : Nat) -> {auto prf : n `modNat` 5 = 0} -> Nat
onlyModBy5 n = n
Затем я попытался использовать эту функцию, чтобы применить onlyModBy5
к сумме Vect n Nat
.
foo : (n : Nat) -> Vect n Nat -> Nat
foo n xs = onlyModBy5 $ sum xs
Но я получил эту ошибку времени компиляции:
When checking right hand side of foo with expected type
Nat
When checking argument prf to function Main.onlyModBy5:
Can't find a value of type
Prelude.Nat.modNatNZ, mod' (foldrImpl (\meth =>
\meth =>
plus meth meth)
0
id
xs)
4
SIsNotZ
(foldrImpl (\meth =>
\meth =>
plus meth meth)
0
id
xs)
(foldrImpl (\meth =>
\meth =>
plus meth meth)
0
id
xs)
4 =
0
Holes: Main.foo
Как я могу использовать указанную выше функцию onlyModBy5
с foo
?