如何找出 Haskell 中发生异常的行号?

Jim*_*hoi 3 debugging haskell exception

我是haskell的初学者。

现在我正在努力解决负索引异常。

但与其他通用语言不同,在我看来,haskell 没有显示发生异常的行号。

是否可以知道发生异常的行号?

Dan*_*ner 6

这些天基本上有两种好方法。

  1. HasCallStack通过你的代码自由地散布约束,如

     foo :: HasCallStack => Int -> [a] -> a
     foo n xs = xs !! n
    
    Run Code Online (Sandbox Code Playgroud)
  2. 编译-prof并传递-xcRTS 标志,如

     ghc -prof foo.hs && ./foo +RTS -xc
    
    Run Code Online (Sandbox Code Playgroud)

后者更容易,前者使您可以更好地控制哪些东西被认为“足够有趣”以放入堆栈跟踪。