Sfortunatamente, molte funzioni di Haskell modello non hanno assolutamente alcuna documentazione. Una di queste funzioni è report
. Prende uno Bool
e uno String
e genera un errore di compilazione con la stringa specificata come messaggio di errore. Qualcuno ha idea di cosa diavolo sia il Bool
? Come meglio posso dire, entrambi i valori fanno esattamente la stessa cosa ...Come funziona Langage.Haskell.TH.report?
6
A
risposta
9
Se lo Bool
è True
, viene segnalato un errore; se è False
, viene segnalato un "avviso", il che significa che il codice del modello continuerà a essere eseguito per raccogliere più "avvisi".
2
Osservando il codice sorgente, report
chiamate qReport
, che è un metodo di una classe denominata Quasi
. Questo metodo ha in realtà qualche maledetta documentazione, anche se solo un piccolo frammento. Cito:
Segnala un errore (
True
) o avviso (False
) ... ma continua; utilizzarefail
per fermare
così sembra a fare il mio incidente TH giunzione con un messaggio di errore, ho solo bisogno di chiamare fail
invece. Speriamo che questa informazione possa essere utile a chiunque altro cercando di capirlo ...
Avevo la sensazione che sarebbe stato qualcosa del genere, ma non ero sicuro di quale fosse l'errore e quale fosse un avvertimento. Indipendentemente da ciò, sembra che la compilazione continua in entrambi i modi. (!) Mi sarei aspettato di segnalare un errore per fermare la compilazione, ma non sembra farlo ... – MathematicalOrchid
Dalla documentazione interna: 'Segnala un errore (Vero) o avviso (Falso) ... ma continua ; usa 'fallire' per fermarsi'. Quindi, a quanto pare, devi prenderti cura del passo "fallisci"; Trovo che questa sia una strana decisione di design. – dflemstr
Oh, mi hai battuto. :-) Sì, davvero strano. Dai miei test, sembra che la sola chiamata di "fail" sia sufficiente per fermare la compilazione, fornendo la stringa come messaggio di errore e la posizione della giunzione come origine del problema. Che è praticamente quello che volevo ... – MathematicalOrchid