有没有办法在 Haskell 中获取行号/回溯信息?
(就像C的__LINE__
宏或Python的traceback.extract_stack()
)
这对我编写生成 C++ 代码的 Haskell 程序很有用,该程序将用注释来表示,告诉哪个 Haskell 行负责哪个 C++ 行。
哈斯克尔示例:
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
其实你可以使用CPP__LINE__
Haskell 中的 pragma。
{-# 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)