有没有办法在Haskell中获取行号/回溯信息?
(如C的__LINE__
宏或Python的traceback.extract_stack()
)
这对我来说是有用的,可以编写生成C ++代码的Haskell程序,这个代码将用注释来表示哪个Haskell行负责哪个C ++行。
Haskell示例:
LINE "#include <foo.h>" -- this is line 12
: INDENT "void Foo::bar() {" "}"
[ LINE $ "blah(m_" ++ x ++ ", \"" ++ x ++ "\");"
| x <- ["Potato", "Avocado"]
]
将生成此C ++代码:
#include <foo.h> // gen.hs:12
void Foo::bar() { // gen.hs:13
blah(m_Potato, "Potato"); // gen.hs:14
blah(m_Avocado, "Avocado"); // gen.hs:14
} // gen.hs:13
答案 0 :(得分:14)
您实际上可以在Haskell中使用CPP __LINE__
编译指示。
{-# LANGUAGE CPP #-}
main = do
print "one"
print __LINE__
$ runhaskell A.hs
"one"
5
此外,如果Control.Exception.assert
函数的条件失败,它将发出一个行号。
import Control.Exception
main = do
print "one"
assert False $
print "two"
$ runhaskell A.hs
"one"
A.hs: A.hs:5:5-10: Assertion failed