Frage

Wenn ich eine habe Name In TemplateHaskell und den Wert der Variablen, die sie nennt, ermitteln, vorausgesetzt, die Variable wird als wörtlich deklariert, kann dies dann getan werden?

var = "foo"
-- Can `contentsOf` be defined?
$((contentsOf . mkName $ "var") >>= guard . (== "foo"))
War es hilfreich?

Lösung

Theoretisch ja. In der Praxis nein.

Das Erfinden von Sachen über vorhandene Namen wird verwendet, um mithilfe von Dingen fertig zu werden reify :: Name -> Q Info, und für eine solche Definition würden Sie wieder zurückbekommen VarI Wert, der a enthält Maybe Dec aufstellen. Dies scheint darauf hinzudeuten, dass Sie in einigen Fällen den Syntaxbaum für die Deklaration der Variablen erhalten können, die es Ihnen ermöglichen, das Literal zu extrahieren, wie auch immer Aktuelle Versionen von GHC kehren immer zurück Nothing in diesem Bereich, Sie haben also kein Glück für eine reine TH -Lösung.

TH ermöglicht jedoch willkürliche IO -Aktionen auszuführen Haskell-Src-Ausgezog, Ich vermute jedoch, dass das mehr Ärger wären als es wert wäre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top