2013-01-05 10 views
13

Die Standardbibliothek bietet eine printf-Funktion, die Varadic zu verwalten. Was es jedoch nicht tut, ist die Kompilierzeitüberprüfung, ob die Argumenttypen mit der Formatzeichenfolge übereinstimmen. Das würde abhängige Typen erfordern, und es klingt, als wäre es auch wirklich schwer zu implementieren! (Sie müssten die gesamte Formatzeichenfolge mit Typensignaturen analysieren ... yuck!)Typ-safe printf

Aber auf Nachdenken, jetzt frage ich mich ... Können wir das mit Template Haskell machen? In der Tat hat jemand schon eine Bibliothek dafür geschrieben ??

(Es sieht aus wie Sie ziemlich leicht einen quasi-quoter schreiben könnte, die eine printf-Format-Spezifikation liest und erzeugt die notwendige N-arg-Funktion ...)

Antwort

8

Ja, es ist möglich. Ja, es ist getan worden. Sie sollten sich wirklich Hackage für diese Art von Frage prüfen: http://hackage.haskell.org/package/Printf-TH

+1

Interessant. Ich schaue jetzt Hackage an, und ich sehe nicht ... oh, warte, es ist nicht unter Text, es ist unter Utils. Und wow, schau dir all die Dokumentation an, die es hat ... :-( – MathematicalOrchid

+0

@MathematicalOrchid Ich habe gerade den Quellcode überprüft und es scheint, als wäre die Datei nicht mit dem Schellfisch-Markup dokumentiert. Seltsam, dass niemand das Paket verwaltet ... – Tarrasch

1

Neben Printf-TH, es scheint, dass printf-mauke hat einige TH auch als nachträglicher Einfall geworfen ... Irgendwelche andere Beispiele?

6

Wenn Sie bereit sind zu akzeptieren, dass die "format string" nicht wirklich eine Zeichenfolge ist, können Sie eine printf-ähnliche Funktion auch direkt in Haskell implementieren.

Dies wurde beispielsweise in einer Veröffentlichung von Ralf Hinze, genannt "Formatting: a class act", beschrieben. Auf Hackage kann ich nur das xformat Paket finden, das etwas ähnlich zu diesem Ansatz implementiert.