QuasiQuote mit Argumenten

8

Ich möchte ein Zitat in Haskell schreiben. Das Namensargument muss in gen-Funktion übergeben werden, um eine Deklaration zu generieren.

%Vor%

Es scheint jedoch, dass ich das Zitat nicht so verwenden kann

%Vor%

Da Haskell keine Quote-Deklarationen und -Quoten in der gleichen Datei erlaubt, was lästig ist, was kann ich tun, um ein Argument von außen in das Zitat zu übernehmen?

    
Song Zhang 08.12.2014, 02:32
quelle

1 Antwort

6

Sie haben zwei Möglichkeiten:

  1. Wechseln Sie zu den Spleissen $(...) ,
  2. Kodieren Sie Ihren Parameter in der Eingabezeichenfolge zum Quasi-Quotierer.

Mit Spleißsyntax würde Ihr Beispiel wie folgt aussehen:

%Vor%

und das Aufrufen sieht folgendermaßen aus: $(quote "Hello" "from x to y")

Um Option 2 zu demonstrieren, ist hier ein einfacher Quotierer, der eine literale Zeichenfolge mit einem Zeichen umgibt:

%Vor%

Das erste Zeichen der Eingabezeichenfolge wird als zu verwendendes Klammerzeichen interpretiert. In der Tat haben wir einen Char -Parameter an eine Funktion vom Typ Char -> QuasiQuoter übergeben.

Für komplexere Parameter oder mehrere Parameter müssen Sie eine eigene Syntax und einen Parser erstellen, um sie zu dekodieren.

Update: Hier ist ein etwas komplexeres Beispiel, in dem der Aufruf [foo| var xyz|] var als Name einer Variablen und xyz als Literal-String behandelt:

%Vor%     
ErikR 08.12.2014 03:43
quelle

Tags und Links