在顶层函数中定义的内部函数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