显示Haskell中抛出的错误的回溯(backtrace)可以通过使用GHC.Stack
模块中的callStack
和prettyCallStack
函数来实现。以下是一个简单的示例:
import GHC.Stack
-- 定义一个可能会抛出异常的函数
divide :: Int -> Int -> Int
divide x y = x `div` y
-- 定义一个处理异常的函数,并显示回溯
handleError :: Either SomeException a -> IO ()
handleError (Left e) = do
putStrLn "发生错误:"
print e
putStrLn "回溯:"
print callStack
handleError (Right _) = putStrLn "操作成功"
main :: IO ()
main = do
let result = try (evaluate (divide 10 0)) :: IO (Either SomeException Int)
handleError result
在这个示例中,我们定义了一个可能会抛出异常的divide
函数,然后在main
函数中使用try
函数捕获异常,并将异常传递给handleError
函数。在handleError
函数中,我们使用callStack
函数获取回溯信息,并使用prettyCallStack
函数将其格式化为可读的字符串。最后,我们将回溯信息输出到控制台。
需要注意的是,callStack
函数只能在使用-prof
选项编译程序时生效。如果不需要回溯信息,可以使用HasCallStack
类型类来代替callStack
函数。
领取专属 10元无门槛券
手把手带您无忧上云