GHCI断点麻烦

时间:2015-05-02 07:05:29

标签: haskell ghci

这是一个玩具函数,在文件中定义,称之为test.hs:

x a b c = do
  putStrLn $ show a
  return a

当然可以将其导入GHCI并设置断点:

λ :load test.hs 
[1 of 1] Compiling Main             ( test.hs, interpreted )
Ok, modules loaded: Main.
λ :break x
Breakpoint 3 activated at test2.hs:(1,1)-(3,12)
λ x 1 2 3
Stopped at test2.hs:(1,1)-(3,12)
_result :: IO b = _

然而似乎没有办法检查参数b和c。

这有什么办法吗?我正在运行GHCi 7.8.4。

2 个答案:

答案 0 :(得分:3)

来自GHC user's guide

  

GHCi为表达式的自由变量[6]提供了绑定   放置断点的地方......

     

[6]我们最初为范围内的所有变量提供了绑定   不仅仅是表达式的自由变量,而是发现了这一点   受影响的表现相当,因此目前的限制   只是自由变量。

答案 1 :(得分:2)

我找到了一个hacky解决方法。如果重新定义函数x,如下所示:

x a b c = do
    return a; return b; return c;
    putStrLn $ show a
    return a

然后必须调用:step然后b和c可以被检查:

λ :break x
Breakpoint 4 activated at test2.hs:(1,1)-(4,12)
λ x 1 2 3
Stopped at test2.hs:(1,1)-(4,12)
_result :: IO b = _
λ :step
Stopped at test2.hs:(1,11)-(4,12)
_result :: IO Integer = _
a :: Integer = 1
b :: Integer = 2
c :: Integer = 3

如果有办法在没有重新定义函数的情况下执行此操作,那可能会很好。