Haskell 来自GHC的更多描述性错误消息

Haskell 来自GHC的更多描述性错误消息,haskell,indexing,error-handling,ghci,Haskell,Indexing,Error Handling,Ghci,我通过GHCI运行了一些代码,得到了以下错误: *** Exception: Prelude.!!: index too large 过了一会儿,我继续修复这个bug(正如您可能想象的,它是由一个太大的索引引起的),但我希望GHC能告诉我这个大索引是在哪一行进行评估的 有什么办法可以做到这一点吗 A) 使GHCI更加冗长,或 B) 使用一种常见的做法,避免 这是一个错误(当然避免使用较小的索引) ,例如,假设这是您的源文件: xs :: [Int] xs = [1..10] foo ::

我通过GHCI运行了一些代码,得到了以下错误:

*** Exception: Prelude.!!: index too large
过了一会儿,我继续修复这个bug(正如您可能想象的,它是由一个太大的索引引起的),但我希望GHC能告诉我这个大索引是在哪一行进行评估的

有什么办法可以做到这一点吗

  • A) 使GHCI更加冗长,或
  • B) 使用一种常见的做法,避免 这是一个错误(当然避免使用较小的索引)
,例如,假设这是您的源文件:

xs :: [Int]
xs = [1..10]

foo :: Int -> IO ()
foo i = print $ xs !! i

main :: IO ()
main = mapM_ foo [1..10]
如果你用

ghc --make -prof -fprof-auto  StackTrace.hs 
然后按如下方式运行它

./StackTrace +RTS -xc
然后你得到

*** Exception (reporting due to +RTS -xc): (THUNK_1_0), stack trace: 
  GHC.List.CAF
  --> evaluated by: Main.foo,
  called from Main.main,
  called from Main.CAF
StackTrace: Prelude.!!: index too large

它至少告诉您
main
foo
chain.

依赖类型将是一个快速解决方案…@ErikAllik不,将依赖类型添加到Haskell很可能是最慢的解决方案