In Template Haskell, die Q
Monade ist, wo alles geht. Allerdings hat Q
eine ziemlich begrenzte API. Ich hätte gerne einen Wert vom Typ valueNameStore :: Q (String -> Maybe Name)
, der im Prinzip die Funktionalität lookupValueName :: String -> Q (Maybe Name)
erfasst, aber mit dem Speicher der Variablen, die im Moment der Bindung verfügbar sind.Extract Wert Umgebung von Q Monade
Ich denke, das theoretisch fundiert ist: Ich soll nicht meine Lookups sequenzieren muß, wenn ich sie in Bezug auf einen gemeinsamen konstanten Zustand bin durchführen, die eine Momentaufnahme des Zustands der Q
ist, wenn ich zunächst binden auf valueNameStore
genannt.
Wenn diese nicht möglich ist, ist es eine Möglichkeit, sie zu zwingen, in einem unsicheren Weg durch? Ich bin bereit, mich zu senken, was auch immer Hacks die unsafePerformIO
...
Was passiert, wenn ich _was_ bereit, was Zuordnungen zu erhalten, ist in der Abbildung zu der Zeit wird der Ausdruck ausgewertet? Ich sehe nicht, wie "unsafePerformIO" helfen würde. Ja, die Snapshot-Idee ist, was ich dachte, aber ... eine Menge Zeug ist in Reichweite. Auch nur das Vorspiel ... – Alec
Auch hier hilft "unsafePerformIO" nicht. 'lookupValueName' lebt in der' Q' Monade und die meisten Operationen (nämlich alle Nachschlageoperationen) können nicht aus der 'Q' Monade entkommen. – Alec
Nichts für ungut beabsichtigt, aber versuchen Sie sogar die Dinge, die Sie vorschlagen? Die 'IO' Instanz von' Quasi' [erlaubt keine Lookups] (http://hackage.haskell.org/package/template-haskell-2.11.1.0/docs/src/Language.Haskell.TH.Syntax. html # Zeile-124). 'runQ' wird nicht helfen - du kannst tatsächlich (AFAIK)' Q' nicht entkommen. – Alec