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