2012-03-07 11 views
6

Desafortunadamente, muchas funciones de Template Haskell no tienen absolutamente ninguna documentación. Una de esas funciones es report. Toma un Bool y un String, y produce un error de compilación con la cadena especificada como el mensaje de error. ¿Alguien tiene idea de para qué sirve el Bool? Lo mejor que puedo decir es que cualquier valor hace exactamente lo mismo ...¿Cómo funciona Langage.Haskell.TH.report?

Respuesta

9

Si el Bool es True, se informa un error; si es False, se informa una "advertencia", lo que significa que el código de la plantilla continuará ejecutándose para recopilar más "advertencias".

+0

Tenía la sensación de que sería algo por el estilo, pero no estaba seguro de cuál era el error y que uno advertía. A pesar de todo, parece que la compilación continúa de cualquier manera. Lo que habría esperado informar un error para detener la compilación, pero no parece hacerlo ... – MathematicalOrchid

+0

A partir de la documentación interna (!): 'Señalar un error, (verdadero) o advertencia (Falso) ... pero continuar ; usa 'fail' para parar'. Por lo tanto, usted debe encargarse del paso "fallido", aparentemente; Encuentro que esta es una decisión de diseño extraña. – dflemstr

+0

Oh, me ganaste. :-) Sí, extraño de hecho. A partir de mis pruebas, parece que basta con llamar a 'fail' para detener la compilación, dando a la cadena el mensaje de error y la ubicación del empalme como origen del problema. Que es más o menos lo que yo quería ... – MathematicalOrchid

2

Mirando el código fuente, report llama a qReport, que es un método de alguna clase llamada Quasi. Este método en realidad tiene cierta documentación maldita, aunque solo un pequeño fragmento. Cito:

Informe un error (True) o advertencia (False) ... pero continúe; fail utilizar para detener

por lo que parece hacer mi accidente TH empalme con un mensaje de error apropiado, sólo hay que llamar fail lugar. Espero que esta información será útil para cualquier persona tratando de darse cuenta de eso ...