Domanda

Ho il seguente codice del modello Haskell nel mio modulo, che fa parte di un programma più ampio.

$(derive makeFoldable ''JStatement)

Ho il sospetto che l'istanza generato pieghevole non è esattamente quello che originariamente avevo in mente, ma non riesco a trovare un modo per verificare questo. Quindi, preferibilmente utilizzando solo ghci, è possibile visualizzare l'istanza generata?

Ho provato quanto segue e ottenuto un errore di sintassi e sto indovinando questo è perché lo sto facendo ™ Sbagliato.

> derive makeFoldable ''JStatement

<interactive>:1:21:
    lexical error in string/character literal at character '\''
È stato utile?

Soluzione

ho capito. Se si passa -ddump-splices stamperà le istanze generate al terminale durante la compilazione del modulo.

Altri suggerimenti

GHCi riporta "lexical error..." perché non si dispone di Template Haskell attivato nella sessione GHCi. È possibile attivarlo sia     passando -XTemplateHaskell sulla riga di comando     o dall'interno GHCi sé:

ghci> :set -XTemplateHaskell

Dopo aver fissato che, si dovrebbe ottenere un errore di artisti del calibro di:

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

Ora, sono disponibili diverse opzioni per stampare le cose che sono dentro la monade Q:

  • Usa -ddump-splices (Come già sottolineato in risposta di Deniz Dogan)

  • Piuttosto stampare il codice Haskell generato da GHCi sé:

    > putStrLn $(stringE . pprint =<< derive makeFoldable ''JStatement)
    instance Foldable (JStatement ...)
      where foldr ... = ...
    
  • Mostra l'attuale struttura sulla base di costruttori:

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

Gli ultimi due potrebbero essere semplificata utilizzando runQ, ma questo non funziona per la generazione di codice che utilizza alcune funzioni Template Haskell, come le operazioni reify. Questo include alcuni (o forse più?) Derivazioni del pacchetto derivano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top