ghci 显示执行堆栈

标签 ghci haskell

所以我正在完成 Real World Haskell 的一些初始章节练习,我想知道 GHCi 中是否有一个选项可以让它在每个递归调用上显示带有参数的函数评估。例如,我写了一个简单版本的“map”,当我应用它时,我希望 GHCi 显示每个带有实际参数的递归调用(希望是表达式结果)。可以让我了解幕后发生的事情。

附言在我写这篇文章时,我有一种感觉,它可能会受到 haskell 执行模型的懒惰的限制,如果我错了,请纠正我。

最佳答案

您可以为此使用引擎盖:

import Debug.Hood.Observe

map2 f [] = []
map2 f (x:xs) = f x : (observe "map2" $ map2) f xs

main = runO $ print $ map2 (+1) ([1..10] :: [Int])

当您运行它时,它将打印对 map2 的每个调用以及相应的参数和返回的结果。你会看到类似的东西:
.
.
.
-- map2
{ \ { \ 10  -> 11
    , \ 9  -> 10
    } (9 : 10 : []) 
    -> 10 : 11 : []
}
-- map2
{ \ { \ 10  -> 11
    } (10 : []) 
    -> 11 : []
}
-- map2
{ \ _ []  -> []
}

更多信息请查看 examples .

关于ghci 显示执行堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3225472/

相关文章:

haskell - 了解 `evaluate` 功能

在 GHCi 内的包模块中调试 IO

haskell - 取无限结构的有限部分

haskell - 动态链接是否会损害 GHC 中的内联性能?

Haskell Parsec - 优化 int 解析

haskell - 如何用 ghci 编程 haskell?

haskell - 是否有无符号整数类型会警告负文字?

haskell - 这种语法和 do-notation 一样具有表现力吗?

haskell - 如何在我的 DSL 中处理许多不同类型的操作?

Haskell:使用 $ 的函数应用程序