Peter Hercek wrote:
Hi,

I expected ":trace expr" to always add data to the trace history but it does not do so for CAFs (which are not reduced yet). My point is that the command ":trace z" did not add anything to the trace history and I cannot check why value z is 2, because value of y is not in the trace history. Is this the expected behavior? If it is, how can I make ghci to extend the trace history when "forcing" variables?

Peter.

Here is the example:

status:0 pe...@metod [765] ~/tmp
% cat a.hs
test :: Int -> Int
test x =
  let y = x+1 in
  let z = y+1 in
  z
status:0 pe...@metod [766] ~/tmp
% ghci a.hs
GHCi, version 6.8.2: http://www.haskell.org/ghc/  :? for help
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( a.hs, interpreted )
Ok, modules loaded: Main.
*Main> :break Main 5
Breakpoint 0 activated at a.hs:5:2
*Main> :trace test 0
Stopped at a.hs:5:2
_result :: Int = _
z :: Int = _
4    let z = y+1 in
5    z
6
[a.hs:5:2] *Main> :back
Logged breakpoint at a.hs:(2,0)-(5,2)
_result :: Int
1  test :: Int -> Int
2  test x =
3    let y = x+1 in
4    let z = y+1 in
5    z
6
[-1: a.hs:(2,0)-(5,2)] *Main> :back
no more logged breakpoints

ok so far - y and z have not been evaluated.

[-1: a.hs:(2,0)-(5,2)] *Main> :forward
Stopped at a.hs:5:2
_result :: Int
z :: Int
4    let z = y+1 in
5    z
6
[a.hs:5:2] *Main> :trace z
2

this evaluates z.

[a.hs:5:2] *Main> :back
Logged breakpoint at a.hs:(2,0)-(5,2)
_result :: Int
1  test :: Int -> Int
2  test x =
3    let y = x+1 in
4    let z = y+1 in
5    z
6

You are going back in the original context, but I presume you were expecting to go back in the evaluation of z. You can only go back in the context of the current evaluation, however.

Try this:

*Main> :break 3
Breakpoint 4 activated at trace.hs:3:10-12
*Main> :trace test 0
Stopped at trace.hs:3:10-12
_result :: Int = _
x :: Int = 90
2  test x =
3    let y = x+1 in
4    let z = y+1 in
[trace.hs:3:10-12] *Main> :history
-1  : test (trace.hs:4:10-12)
-2  : test (trace.hs:5:2)
-3  : test (trace.hs:(2,0)-(5,2))
<end of history>
[trace.hs:3:10-12] *Main> :back
Logged breakpoint at trace.hs:4:10-12
_result :: Int
y :: Int
3    let y = x+1 in
4    let z = y+1 in
5    z
[-1: trace.hs:4:10-12] *Main> :back
Logged breakpoint at trace.hs:5:2
_result :: Int
z :: Int
4    let z = y+1 in
5    z
6

Cheers,
        Simon

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to