Ich möchte diese schöne, saubere Art und Weise haben die Eigenschaften eines Objekts mit Funktionen und Mustervergleich zu beschreiben:Funktionsdeklaration über Pattern-Matching auf mehreren Leitungen
data Animal = Cat | Dog | Cow
isBig :: Animal -> Bool
isLoyal :: Animal -> Bool
-- many more possible properties, including complicated non-bools, methods, and whatnot
--- Describing Cat
isBig Cat = False
isLoyal Cat = False
--- more properties
--- Describing Dog
isBig Dog = False
isLoyal Dog = True
--- more properties
--- Describing Cow
isBig Cow = True
isLoyal Cow = False
--- more properties
Dies ist jedoch eine Fehlermeldung über mehrere Erklärungen gibt. Offensichtlich muss die Funktionsdefinition über den Mustervergleich in aufeinanderfolgenden Zeilen erfolgen.
Ist es bezeichnend, dass mein Ansatz falsch ist, un-Haskell-like? Oder ist es nur ein Fehler in der Sprache? Oder verstehe ich etwas falsch?
In diesem Fall macht es keinen Sinn - oder ich hätte es in meiner Antwort erwähnt - aber vielleicht ist der Fall in Ihrer Frage eine Vereinfachung dessen, was Sie tatsächlich versuchen zu tun. Wenn das der Fall ist, könnten Sie in Betracht ziehen, eine Typklasse zu erstellen, die 'isBig',' isLoyal' usw. enthält und _types_ 'Dog',' Cat' und 'Cow' erzeugt, die diese Klasse implementieren. Dies ist jedoch ziemlich anders: Klassen sind offen, im Gegensatz zu Typen. –