Ich habe diesen Datentyp
%Vor%Und zwei Dummy-Funktionen
%Vor%Der zweite funktioniert gut, aber der erste verursacht einen Fehler: "Parse error in pattern: exec". Können Sie erklären, warum ich nicht auf Konstruktor auf diese Weise anpassen kann: apply (exec struct) = ...?
Es verursacht eine Menge von Boilerplate-Code, wenn ich mehrere Konstruktoren in meinem Datentyp habe und Muster müssen sie alle separat übereinstimmen.
Warum? Weil Sie nur Konstruktoren zuordnen können, und exec
ist eine Art neue Variable. Ein Grund dafür ist zum Beispiel das Folgende:
Wie sollte jemand wissen, welche von Exec1
und Exec2
Sie zusammenpassen? Sie konnten hier keine Funktionen anwenden, da der tatsächliche Typ von struct
nicht ermittelt werden konnte.
Wenn Sie den Mustervergleich reduzieren möchten, gibt es eine Reihe von Möglichkeiten, von case
über verschiedene data
Implementierung (wie @Karolis vorgeschlagen) und Hilfsfunktionen bis zu Konstrukten höherer Ebene mit komplexeren Typen. Aber das ist ein endloses Thema.
Wenn Sie mehrere Konstruktoren haben, die Daten gemeinsam nutzen, ist es normalerweise besser, die Datendeklaration zu etwas wie
umzuformen %Vor% Jetzt können Sie die Übereinstimmung in apply
wie folgt anpassen
und Sie können immer noch eine Musterübereinstimmung mit einem bestimmten Exec-Typ herstellen
%Vor%"exec" ist kein Typkonstruktor und Sie können nur diejenigen im Mustervergleich verwenden.
Was Sie tun können, ist
%Vor%In Ihrem speziellen Fall können Sie Folgendes tun:
%Vor%Dies wird jedoch nicht zu komplizierteren Ergebnissen passen.
Tags und Links haskell