Claus Reinke wrote:
f x y z | x<y = z | otherwise = z*y
--------------------- $ /cygdrive/d/fptools/ghc/ghc/stage2-inplace/ghc.exe --interactive Debug.hs -ignore-dot-ghci GHCi, version 6.11.20081122: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer ... linking ... done. Loading package base ... linking ... done. Loading package ffi-1.0 ... linking ... done. [1 of 1] Compiling Main ( Debug.hs, interpreted ) Ok, modules loaded: Main. *Main> :break f Breakpoint 0 activated at Debug.hs:(1,0)-(2,24) *Main> f 3 2 1 Stopped at Debug.hs:(1,0)-(2,24) _result :: a = _ [Debug.hs:(1,0)-(2,24)] *Main> :list vv 1 f x y z | x<y = z 2 | otherwise = z*y ^^ 3 [Debug.hs:(1,0)-(2,24)] *Main> :step Stopped at Debug.hs:1:10-12 _result :: a = _ [Debug.hs:1:10-12] *Main> :list 1 f x y z | x<y = z ^^^ 2 | otherwise = z*y [Debug.hs:1:10-12] *Main>
Looks like a bug to me, At this location the x a y should be observable and cought in trace history. It actually looks very similar to bug I reported here: http://hackage.haskell.org/trac/ghc/ticket/2740 Notice that if you write your function like this (as I mostly do): f x y z = if x<y then z else z*y then x and y are observable when "if x<y then z else z*y" is selected but not when "x<z" is selected! I see that you use windows, I did in past to but switches to linus since there were too much problems on windows with ghc, expecially libraries. Anyway here are some tips you might like: * you can avoid /cygdrive prefix in cygwin if you set cygdrive-prefix to /; see man mount and search for -c option * you can get nicer selection of expression if you set TERM=linux and launch ghci as ansicon ghc --interarctive * you can get ansicon from http://www.geocities.com/jadoxa/ansicon/index.html and a patch for it here: http://www.hck.sk/users/peter/pub/ Peter.