Ich möchte eine TemplateHaskell-Funktion variablesInScope :: Q [Name]
, die eine Liste Name
aller Variablen im Gültigkeitsbereich zurückgibt . TemplateHaskell verfügt offensichtlich über diese Informationen, um Funktionen wie reify :: Name -> Q Info
und zu implementieren lookupValueName :: String -> Q (Maybe Name)
.
Existiert die gewünschte Funktion irgendwo und ich habe sie einfach übersehen? Oder kann es einfach irgendwie gebaut werden?
haskell
template-haskell
Mike Izbicki
quelle
quelle
haskell-src-meta
ein Haskell-Modul als TH AST analysieren.Q
Monade zu verwenden, um das Modul zu laden und diese dann an zu sendenhaskell-src-meta
? Huch. Dies kann auch nicht eindeutig machen, welcher Name in dem bestimmten Bereich verwendet werden soll, in dem sich der Spleiß befindet.print
und dasprint
fromSystem.IO
dann nicht mehr im Gültigkeitsbereich liegt. Das Ergebnis vonvariablesInScope
hat also eine ziemlich komplizierte Abhängigkeit davon, wo im Code der Spleiß auftritt.Antworten:
Leider kann man das nicht
TH
alleine machen. Versuchen Siehaskell-src-meta
, das Haskell-Modul als zu analysierenTH AST
.Q
Zum Laden des Moduls sind jedoch die E / A-Funktionen der Monade erforderlich .Bitte beziehen Sie sich auf https://ghc.haskell.org/trac/ghc/ticket/9699#ticket , um die aktuelle grobe Spezifikation zu sehen
quelle