Debugging 如何计算Haskell中发生异常的行号?

Debugging 如何计算Haskell中发生异常的行号?,debugging,haskell,exception,Debugging,Haskell,Exception,我是哈斯克尔的初学者 现在我正在努力解决负索引异常 但与其他通用语言不同, 在我看来,haskell并没有显示发生异常的行号 有可能知道发生异常的行号吗?现在基本上有两种好方法 在代码中自由地散布约束,如 foo :: HasCallStack => Int -> [a] -> a foo n xs = xs !! n 使用-prof编译并传递-xcRTS标志,如中所示 ghc -prof foo.hs && ./foo +RTS -xc 后者更容

我是哈斯克尔的初学者

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

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


有可能知道发生异常的行号吗?

现在基本上有两种好方法

  • 在代码中自由地散布约束,如

     foo :: HasCallStack => Int -> [a] -> a
     foo n xs = xs !! n
    
  • 使用
    -prof
    编译并传递
    -xc
    RTS标志,如中所示

     ghc -prof foo.hs && ./foo +RTS -xc
    

  • 后者更容易,前者让您能够更准确地控制哪些内容被认为“足够有趣”,可以放在堆栈跟踪中。

    首先使用索引实际上是很少见的。举个例子,你想做什么?有几种方法可以让你为自己的函数获得行(见这里:),我建议我们将Carsten的链接标记为此链接的副本。这是一个很好的问题,而且已经存在,但是它的答案已经过时了。(我可以自己做,但在这个特殊情况下,我对自己的信心异常不确定,特别是因为时间倒转。)还有其他投票吗?(因为一天后有两票赞成,没有一票反对,我将相关问题标记为一个傻瓜。)