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.
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users