2012-03-07 8 views
6

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?

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".

+0

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

+0

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

+0

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

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; utilizzare fail 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 ...