Hilfefunktion zum Bestimmen, ob Nat `mod` 5 == 0

Xash gab mir eine hilfreiche Antwort aufFunktion zum Bestimmen, ob Nat zur Kompilierungszeit durch 5 teilbar ist (das ich von meinem ursprünglichen langen Namen umbenannt habe):

onlyModBy5 : (n : Nat) -> n `modNat` 5 = 0 -> Nat
onlyModBy5 n prf = n

Ein vorherigerAntworte erzog mich, wie man es auf dem REPL mit dem @ laufen läsRefl Streit

-- 5 % 5 == 0, so it should compile
*Test> onlyModBy5 5 Refl
5 : Nat 

-- 7 % 5 == 2, so it should not compile
*Test> onlyModBy5 7 Refl
(input):1:12:When checking an application of function Main.onlyModBy5:
        Type mismatch between
                x = x (Type of Refl)
        and
                modNat 7 5 = 0 (Expected type)

        Specifically:
                Type mismatch between
                        2
                and
                        0

Dann habe ich versucht, eine Hilfsfunktion zu definieren, die das zweite @ lieferprf (Beweis) Argument für Prägnanz. Mit anderen Worten, ich würde es vorziehen, wenn der Aufrufer dieser Funktion das @ nicht angeben musRefl Streit

onlyModBy5Short : (n : Nat) -> Nat
onlyModBy5Short n = onlyModBy5 n Refl

Aber es wird nicht kompiliert:

When checking right hand side of onlyModBy5Short with expected type
        Nat

When checking an application of function Main.onlyModBy5:
        Type mismatch between
                0 = 0 (Type of Refl)
        and
                modNat n 5 = 0 (Expected type)

        Specifically:
                Type mismatch between
                        0
                and
                        Prelude.Nat.modNatNZ, mod' n 4 SIsNotZ n n 4
Holes: Main.onlyModBy5Short

Wie kann diese Funktion, wenn möglich, geschrieben werden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage