在顶层函数中定义的内部函数testing和交互的最佳方法是什么?
当我使用Javascript进行编程时,我发现能够使用debugging器在任何时候停止程序执行并能够从那里运行命令并检查variables,这是非常方便的。
现在回到Haskell,有没有办法在交互式GHCI REPL中运行任意函数,还是仅限于在顶层声明的东西?
什么是工作和debugging内部函数和值的“标准”方法?
当你在GHCi的一个断点停下时,你可以访问范围内的任何东西。 假设你有这样的function:
foo :: Int -> Int foo x = g (x + 2) where gy = x^y
你可以在foo
上设置一个断点并尝试调用它:
> :break foo Breakpoint 1 activated at /tmp/Foo.hs:(2,1)-(3,17) > foo 42 Stopped at /tmp/Foo.hs:(2,1)-(3,17) _result :: Int = _
g
现在还不在范围内,所以我们必须一步一步:
[/tmp/Foo.hs:(2,1)-(3,17)] > :step Stopped at /tmp/Foo.hs:2:9-17 _result :: Int = _ g :: Integral b => b -> Int = _ x :: Int = 42
现在g
在范围内,我们可以像使用任何顶层函数一样使用它:
[/tmp/Foo.hs:2:9-17] > g 2 1764 [/tmp/Foo.hs:2:9-17] > g 3 74088