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?