2014-02-10 2 views
2

Я написал следующую функцию:Template Haskell - Static Утверждай

staticAssert :: Bool -> Q [Dec] 
staticAssert cond = case cond of 
    True -> return [] 
    False -> fail "staticAssert failed" 

В основном это оценивает состояние во время компиляции и, если оно ложно, вызывает ошибку компиляции.

Однако, что бы я хотел для staticAssert вместо вывода «staticAssert failed», вывести выражение, которое не получило подтверждения.

+1

Если вы напишете '$ (fail" err ")', тогда ошибка будет включать исходный файл, номер строки и столбца, например, я получаю 'test.hs: 8: 3: err'. Если вы хотите получить доступ к исходной позиции, чтобы распечатать ее каким-то обычным способом, мы 'Language.Haskell.TH.location' – user2407038

+0

Жаль, что вы правы. Теперь просто распечатать выражение? – Clinton

+0

Вы имеете в виду распечатать результат 'location'? '$ (location >> = fail. show)' ('Loc' не имеет экземпляра show, поэтому вам придется писать или выводить его самостоятельно) – user2407038

ответ

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

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