如何找出Haskell中发生异常的行号?
我是haskell的初学者。
现在我正在努力解决负索引异常。
但与其他通用语言不同,在我看来,haskell 没有显示发生异常的行号。
是否可以知道发生异常的行号?
回答
这些天基本上有两种好方法。
-
HasCallStack通过你的代码自由地散布约束,如foo :: HasCallStack => Int -> [a] -> a foo n xs = xs !! n -
编译
-prof并传递-xcRTS 标志,如ghc -prof foo.hs && ./foo +RTS -xc
后者更容易,前者使您可以更好地控制哪些东西被认为“足够有趣”以放入堆栈跟踪。