Haskell Parsec, Anpassung von oneOf an [String]

8

Ich gehe durch das Schreiben Sie sich ein Schema in 48 Stunden Tutorial.

%Vor%

Das ist toll für Symbole, aber was ist, wenn ich eine Liste von Schlüsselwörtern habe? (d. h. struct, int)

kann oneOf an Listen angepasst werden? Das ist im Idealfall das, was ich möchte, unten abgebildet.

%Vor%

Oder soll ich Text.Parsec.Char importieren und versuchen, M-String über die Liste der Schlüsselwörter zu mappen?

Ich versuche zu symbolisieren und wollte nur wissen, welche Best Practices von anderen stammen, die diesen Weg gegangen sind.

Die Dokumentation sagt etwas wie folgt zu verwenden:

%Vor%

Ссылка

    
The Internet 22.02.2013, 14:11
quelle

1 Antwort

11

Die allgemeine Form davon ist Der choice Kombinator , der den folgenden Typ hat:

%Vor%

Im Grunde geben Sie ihm eine Liste von Parsern, und er versucht sie, bis einer erfolgreich ist. choice wird mit (<|>) implementiert, also ist es dasselbe wie dieser Ansatz.

In Ihrem Fall können Sie, um einer Liste von Keywords, aber keinen anderen Parsern zu entsprechen, einfach string über eine Liste von String s zuordnen und dann choice verwenden.

Auf der anderen Seite würde mapM string etwas völlig anderes machen - es würde erwarten, dass alle der Parser in der richtigen Reihenfolge gelingen.

    
C. A. McCann 22.02.2013, 14:23
quelle

Tags und Links