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?
Sie haben zwei Möglichkeiten:
$(...)
, 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:
Tags und Links haskell template-haskell