Ich versuche Javascript mit Text.PrettyPrint
zu generieren. Das Problem ist, dass nest
eine riesige Einrückung erzeugt, wenn sie neben ein anderes prettyprinted Element gesetzt wird. Zum Beispiel in diesem Code:
fun
beginnt in Spalte 9 in test
(wegen var <+> equals <> empty
links davon), und folglich sind die folgenden Zeilen um 9 + 4 = 13 Spalten eingerückt:
Gibt es eine Möglichkeit, Einrückungen vom linken Rand darzustellen, so dass das obige stattdessen als
gerendert würde %Vor%?
Die Lösung besteht in der Tat darin, wl-pprint
zu verwenden (und nest
durch indent
zu ersetzen). Dann liefert der angegebene Code
wie gewünscht. Für alle, die noch etwas mit dem Versuch tun wollen, auf pretty
zu hacken, beachten Sie, dass obwohl die Konstruktoren für Doc
nicht verfügbar sind, Sie trotzdem über Generic
mit -XPatternSynonyms
:
Das Problem ist meist nicht gegen die vielen Invarianten zu verstoßen, die die Bibliothek unter der Haube hat.
Als Randnotiz fand ich auch wl-pprint-annotated
, eine moderne Re -write of wl-pprint
, mit dem man Zugriff auf die zugrunde liegenden Datenkonstruktoren hat (auf Kosten der Invarianten). Dies ist eigentlich das Paket, das ich am Ende verwenden werde.
Insbesondere kann ich diese Art von Klammerblock so machen, dass, wenn es klein genug ist, es nur auf einer Linie geht:
%Vor%Dann bekomme ich schöne Ergebnisse, die automatisch mehrere Zeilen umfassen oder nicht:
%Vor% Sie können das gewünschte Ergebnis erzielen, indem Sie vcat
auf eine Liste anwenden, in der das erste Element auch die Variablendefinition und -zuweisung enthält.
Beispiel:
%Vor%Tags und Links haskell pretty-print