Angenommen, Sie haben eine schöne induktive Definition, die Sie in Haskell als Datentyp definieren möchten. Ihre induktive Definition ist jedoch (so viele induktive Definitionen) von einer solchen Form, dass die Erzeugungsregeln ihre "Prämissen" benötigen, um eine bestimmte Struktur zu haben. Zum Beispiel: Angenommen wir die folgende Definition haben:Einschränken von Datentypen
- wenn
x
eine gerade ganze Zahl, dann istT x
eine Waffe, - wenn
x
eine ungerade ganze Zahl ist, dannS x
eine Waffe ist.
Wenn ich das definieren will (als Einzel) Datentyp in Haskell, würde ich so etwas wie
data Weapon = T Int | S Int
Offensichtlich schreiben, das wird nicht funktionieren, wie Sie jetzt T 5
und S 4
erzeugen können, für Beispiel. Gibt es eine natürliche Möglichkeit, Einschränkungen für die Konstruktorargumente weiterzuleiten, so dass ich etwas Ähnliches wie den obigen Code schreiben könnte, der die richtige Definition geben würde?
Smart Konstruktoren, meist.Verbieten Sie direkt mit 'T' und' S' und erstellen Sie 'newT' und' newS' Funktionen, die die übergebenen Zahlen überprüfen. –