Cactus私の質問に対処する方法を示しました:Helper Function to Determine if Nat `mod` 5 == 0。Vect n Nat's Evenlyの合計が5になるかどうかを判定しますか?
彼が書いた:
onlyModBy5 : (n : Nat) -> {auto prf : n `modNat` 5 = 0} -> Nat
onlyModBy5 n = n
をその後、私はVect n Nat
年代の合計にonlyModBy5
を適用するには、その関数を使用しようとしました。
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
にはどうすればfoo
で上記onlyModBy5
機能を使用することができますか?
私は 'proo'を' onlyModBy5 k'に明示的に渡すことで 'foo'を少し改善して、今そこから証明が来ているという事実を強調することができると思います。 – Cactus