小编fgh*_*ini的帖子

Haskell HasCallStack 意外行为

以下是我们拥有的一个非常常见的模式的简化,其中您有一些重试组合器包装 IO 操作。我想要一些堆栈跟踪,所以我添加了HasCallStack约束,但结果堆栈跟踪并不令人满意:

import Control.Monad (forM_)
import GHC.Stack

httpCall :: HasCallStack => IO ()
httpCall = do
  putStrLn $ prettyCallStack callStack
  print "http resolved"

retry :: HasCallStack => IO () -> IO ()
retry op =
  forM_ [1] $ \i ->
    op

main :: IO ()
main = retry httpCall
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

CallStack (from HasCallStack):
  httpCall, called at main.hs:16:14 in main:Main
"http resolved"
Run Code Online (Sandbox Code Playgroud)

我假设HasCallStack约束得到解析main以适应参数类型,retry所以我将约束添加到参数类型:

CallStack (from HasCallStack):
  httpCall, called at main.hs:16:14 in main:Main …
Run Code Online (Sandbox Code Playgroud)

haskell stack-trace ghc

5
推荐指数
0
解决办法
227
查看次数

标签 统计

ghc ×1

haskell ×1

stack-trace ×1