2
Я написал следующую функцию:Template Haskell - Static Утверждай
staticAssert :: Bool -> Q [Dec]
staticAssert cond = case cond of
True -> return []
False -> fail "staticAssert failed"
В основном это оценивает состояние во время компиляции и, если оно ложно, вызывает ошибку компиляции.
Однако, что бы я хотел для staticAssert
вместо вывода «staticAssert failed», вывести выражение, которое не получило подтверждения.
Если вы напишете '$ (fail" err ")', тогда ошибка будет включать исходный файл, номер строки и столбца, например, я получаю 'test.hs: 8: 3: err'. Если вы хотите получить доступ к исходной позиции, чтобы распечатать ее каким-то обычным способом, мы 'Language.Haskell.TH.location' – user2407038
Жаль, что вы правы. Теперь просто распечатать выражение? – Clinton
Вы имеете в виду распечатать результат 'location'? '$ (location >> = fail. show)' ('Loc' не имеет экземпляра show, поэтому вам придется писать или выводить его самостоятельно) – user2407038