[Haskell-cafe] Haskell Debugging

Cale Gibbard cgibbard at gmail.com
Tue Nov 14 17:17:17 EST 2006


On 13/11/06, Valentin Gjorgjioski <valentin.gjorgjioski at ijs.si> wrote:
> I'm pretty new in Haskell, few days since I started learning it. I want
> to debu my programs. I'm currently using WinHugs, and I prefer debugger
> for this.
>
> I tried googling and I found Hugs.Observer.
>
> I like it how it works, but still I have one BIG problem with it. It
> doesn't work well with floats.
>
> Following example
>
> import Hugs.Observe
>
> ex8 :: [Float]
> ex8 = (observe "after reverse" ) reverse  [10.0,7.0,3.0,0.0,4.0]
>
> gives me
>
>  >ex8
> [4.0,0.0,3.0,7.0,10.0]
>
>  >>>>>>> Observations <<<<<<
>
> after reverse
>    { \ ($-990871 : $-990888 : $-990905 : $-990922 : $-990939 : [])  ->
> $-990939 : $-990922 : $-990905 : $-990888 : $-990871 : []
>    }
>

First of all, I don't get this behaviour in Hugs 20050308 on Ubuntu.

Main> ex8
[4.0,0.0,3.0,7.0,10.0]

>>>>>>> Observations <<<<<<

after reverse
  { \ (10.0 : 7.0 : 3.0 : 0.0 : 4.0 : [])  -> 4.0 : 0.0 : 3.0 : 7.0 : 10.0 : []
  }

and:
Main> ex8 `seq` ()
()

>>>>>>> Observations <<<<<<

after reverse
  { \ (_ : _ : _ : _ : _ : [])  -> _ : _
  }

So it might just be the version which you have.

I think that the $<n> values are perhaps representations of
unevaluated thunks. Try it with a string, or something like ex =
(observe "after replicate") (replicate 3) (5+5) and see what you get
(should be a list with 3 elements that are all the same thunk). Also
try:

ex8 = foldr seq () xs `seq` (observe "after reverse" ) reverse xs
    where xs = [10.0,7.0,3.0,0.0,4.0]

to see if forcing the values in the list first causes any change in the output.

 - Cale


More information about the Haskell-Cafe mailing list