Haskell-Muster, das zu symmetrischen Fällen passt

8

Angenommen, ich habe einen Haskell-Ausdruck wie:

%Vor%

Gibt es irgendeine Hakell-Syntax, um diese Fälle zu reduzieren, so kann ich jedes Muster anpassen und bar a als Antwort für beide angeben? Oder ist das ungefähr so ​​kurz, wie ich es bekommen kann?

    
rampion 11.05.2011, 18:35
quelle

3 Antworten

5

Das ist so knapp wie in Haskell. In ML gibt es eine Syntax für das, was Sie wollen (durch das Schreiben mehrerer Muster, die die gleichen Variablen nebeneinander durch | mit dem Körper nach dem letzten Muster binden), aber in Haskell gibt es nicht.

    
sepp2k 11.05.2011, 18:45
quelle
8

Wenn Ihr Code komplexer ist als Ihr Beispiel, möchten Sie vielleicht so etwas tun, indem Sie die Alternative -Instanz für Maybe und die PatternGuards -Erweiterung (Teil von Haskell2010) verwenden.

%Vor%

Falls Sie nicht damit vertraut sind, wählt <|> den linken Just , wenn es einen gibt, und gibt andernfalls Nothing zurück, wodurch der Musterschutz fehlschlägt.

    
hammar 11.05.2011 19:17
quelle
4

Sie können -XViewPatterns verwenden, um beliebige Funktionen hinzuzufügen, um Ihre beiden Fälle zu einem einzigen Muster zusammenzufassen. Ihr Muster ist jetzt eine Funktion p , die das Objekt ergibt, das Sie abgleichen möchten:

%Vor%

viel einfacher!

Wir müssen jedoch p definieren als:

%Vor%

oder wie auch immer Sie die Daten vor der Anzeige normalisieren möchten.

Referenzen: Das GHC-Benutzerhandbuch Kapitel zu Ansichtsmustern

    
Don Stewart 11.05.2011 20:13
quelle