2012-03-07 1 views
6

К сожалению, многие функции Template Haskell не имеют абсолютно никакой документации. Одной из таких функций является report. Он принимает Bool и String и производит ошибку компиляции с указанной строкой в ​​качестве сообщения об ошибке. Кто-нибудь знает, к чему, черт возьми, Bool? Насколько я могу судить, любая ценность делает то же самое ...Как работает Langage.Haskell.TH.report?

ответ

9

Если Bool - True, сообщается об ошибке; если это False, сообщается «предупреждение», что означает, что код шаблона будет продолжать работать, чтобы собирать больше «предупреждений».

+0

У меня было ощущение, что это будет что-то вроде этого, но я не был уверен, какая из них была ошибкой, а какая была предупреждающей. Несмотря на это, кажется, что компиляция продолжается в любом случае. (!) Я бы ожидал сообщения об ошибке, чтобы остановить компиляцию, но, похоже, это не так ... – MathematicalOrchid

+0

Из внутренней документации: «Сообщить об ошибке (True) или предупреждении (False) ... но продолжить ; используйте «fail», чтобы остановить ». Таким образом, вы должны позаботиться о том, чтобы сделать «неудачный» шаг, по-видимому; Я считаю это странным дизайнерским решением. – dflemstr

+0

О, ты избил меня. :-) Да, странно. Из моего тестирования кажется, что просто вызвать 'fail' достаточно, чтобы остановить компиляцию, указав в качестве сообщения об ошибке строку и место сплайсинга в качестве источника проблемы. Это в значительной степени то, что я хотел ... – MathematicalOrchid

2

Рассматривая исходный код, report вызывает qReport, что является методом некоторого класса под названием Quasi. Этот метод действительно имеет некоторую проклятую документацию - хотя и крошечный фрагмент. Цитирую:

Сообщить об ошибке (True) или предупреждение (False) ... но вести; использовать fail остановить

Так что, похоже, чтобы сделать мою аварию TH сращиваний с соответствующим сообщением об ошибке, мне просто нужно позвонить fail вместо этого. Надеюсь, эта информация будет полезна всем, кто пытается понять это ...

 Смежные вопросы

  • Нет связанных вопросов^_^