有没有办法在haskell中获取行号/追溯信息?
(像C的 __LINE__ 宏或python的 traceback.extract_stack() )
__LINE__
traceback.extract_stack()
这对于我编写HASKEL程序来说是有用的,它生成C++代码,它将用注释说明哪一个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
你可以使用CPP __LINE__ 哈斯克尔的杂注。
{-# LANGUAGE CPP #-} main = do print "one" print __LINE__ $ runhaskell A.hs "one" 5
此外,还有 Control.Exception.assert 如果条件失败,函数将发出行号。
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