2010-07-09 9 views
5

Das haskell-src-exts-Paket enthält Funktionen für den hübschen Druck eines Haskell AST. Was ich tun möchte, ist sein Verhalten bei bestimmten Konstruktoren zu ändern, in meinem Fall die Art, wie SCC-Pragmas gedruckt werden. Alles andere sollte also standardmäßig gedruckt werden, nur SCCs werden anders behandelt. Ist es möglich, es zu tun, ohne die source file zu kopieren und zu bearbeiten, was mache ich jetzt?Ändern des hübschen Druckers von haskell-src-exts

Antwort

2

Nun, die Bibliothek hat eine Sache richtig gemacht, mit einer Klasse für Pretty. Die Herausforderung besteht dann darin, eine andere Instanz für die Konstruktoren auszuwählen, die Sie anders drucken möchten. Im Idealfall würden Sie einfach den AST-Knoten neu eingeben, der Ihnen wichtig ist, und ihn irgendwie in den AST ersetzen.

Jetzt ist das Problem hier, dass der Haskell AST, der durch die Bibliothek exportiert wird, seine Typenstruktur örtlich festgelegt hat. Es tut nicht, z.B. Verwenden Sie two-level types, wodurch Sie neue Typen für Teile der Struktur ersetzen können. Daher müssten Sie den Typ der AST bis zu dem Knoten neu definieren, für den Sie den Typ ändern möchten.

+0

Wie könnte diese Technik verwendet werden, um einen Knoten im AST zu ersetzen? Nehmen wir an, ich möchte (in den Definitionen aus dem zitierten Papier) "Arith" in "Term" mit einem benutzerdefinierten Typ "MyArith" ersetzen. Ist 'Term' nicht festgelegt mit seiner Definition,' Arith' zu verwenden? –

Verwandte Themen