Konstruktormuster, das mit haskell übereinstimmt

7

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.

    
user1432699 05.06.2012, 08:10
quelle

5 Antworten

3

Warum? Weil Sie nur Konstruktoren zuordnen können, und exec ist eine Art neue Variable. Ein Grund dafür ist zum Beispiel das Folgende:

%Vor%

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.

    
phg 05.06.2012, 08:23
quelle
19

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

%Vor%

und Sie können immer noch eine Musterübereinstimmung mit einem bestimmten Exec-Typ herstellen

%Vor%     
shang 05.06.2012 08:27
quelle
3

"exec" ist kein Typkonstruktor und Sie können nur diejenigen im Mustervergleich verwenden.

Was Sie tun können, ist

%Vor%     
Karolis Juodelė 05.06.2012 08:14
quelle
1

In Ihrem speziellen Fall können Sie Folgendes tun:

%Vor%

Dies wird jedoch nicht zu komplizierteren Ergebnissen passen.

    
Nicolas Dudebout 05.06.2012 13:16
quelle
0
%Vor%     
Gabriel Gonzalez 05.06.2012 15:38
quelle

Tags und Links