Ich habe einen Datentyp, der eine Zahl im Konstruktor nimmt, und diese Zahl MUSS zwischen 1 und 5 sein (dargestellt als 0..4):In Idris, wie man 1 zu einem Fin hinzufügen, bis ein "max" erreicht wird
import Data.Fin
data Stars = MkStars (Fin 5)
ich möchte eine Funktion erstellen, die man zu einem bestehenden star
hinzuzufügen, und wenn es bereits ein 5 stars
, tut nichts
ich versuchte
addOneStar: Stars -> Stars
addOneStar (MkStars FZ) = MkStars (FS FZ)
addOneStar (MkStars (FS x)) = if x < 3
then MkStars (FS (FS x))
else MkStars (FS x)
Aber es tun Es kompiliert nicht mit dem Fehler:
Type mismatch between
Fin 4 (Type of x)
and
Fin 3 (Expected type)
Specifically:
Type mismatch between
1
and
0
Kann mir jemand erklären, warum gibt es diesen Fehler? Und wie man es repariert?
Warum nicht einfach die 'Maybe' fallen lassen? –
@ AndrásKovács: Was wäre das 'nextFin' des letzten' Fin'? – Cactus
[Das funktioniert] (http://lpaste.net/169524). –