Frage

Ich habe folgendes Template Haskell Code in meinem Modul, das Teil einer größeren Anwendung ist.

$(derive makeFoldable ''JStatement)

Ich vermute, dass die erzeugte Instanz Faltbare nicht genau das, was ich ursprünglich im Sinne hatte, aber ich kann nicht einen Weg, um zu überprüfen diese finden. Also, vorzugsweise nur ghci verwendet wird, ist es möglich, die erzeugten Instanz zu sehen?

habe ich versucht, den folgenden und bekam einen Syntaxfehler und ich vermute, das ist, weil ich es falsch ™ mache.

> derive makeFoldable ''JStatement

<interactive>:1:21:
    lexical error in string/character literal at character '\''
War es hilfreich?

Lösung

ich es herausgefunden. Wenn Sie passieren -ddump-splices wird es die erzeugten Instanzen mit dem Anschluss drucken, wenn das Modul kompiliert wird.

Andere Tipps

GHCi berichtet "lexical error..." weil Sie Template Haskell nicht in Ihrer GHCi Sitzung aktiviert. Sie können es entweder aktivieren     durch -XTemplateHaskell auf der Befehlszeile Passieren     oder von innen GHCi selbst:

ghci> :set -XTemplateHaskell

Danach repariert ist, sollten Sie einen Fehler in den Gleichen von:

No instance for (Show DecsQ) arising from a use of ‘print’
In a stmt of an interactive GHCi command: print it

Nun, Sie haben mehrere Möglichkeiten, drucken Dinge, die im Inneren des Q Monade sind:

  • Verwenden -ddump-splices (Wie bereits erwähnt in Deniz Dogan Antwort )

  • Pretty den erzeugten Haskell-Code von GHCi drucken selbst:

    > putStrLn $(stringE . pprint =<< derive makeFoldable ''JStatement)
    instance Foldable (JStatement ...)
      where foldr ... = ...
    
  • Zeigen Sie die aktuelle Struktur auf Basis von Konstrukteuren:

    > putStrLn $(stringE . show =<< derive makeFoldable ''JStatement)
    [InstanceD [] (AppT (ConT Foldable) (... JStatement ...)) [...]]
    

Die letzten beiden könnte vereinfacht werden, indem runQ, Dies funktioniert jedoch nicht für die Codegenerierung, dass verwendet einige Template Haskell Funktionen, wie reify Operationen. Dazu gehören einige (oder vielleicht die meisten?) Ableitungen des derive Paket.

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