
Thanks for the info, very interesting. Yes, I'm using GHCi, and I'm using forkOS, and I'm using OpenGL... Since I'm used to write heavily multi-threaded/multi-core code in imperative languages, I would like to understand more about the existing execution models, and those "black holes"... Understanding the low-level details helps a lot for me. Actually the problem was caused by (yet another) strict pattern match in my code, which should have been lazy. I find it strange that this would cause 0% CPU time... But then again I don't understand the details of how GHCi/GHC works. I did read the book "Modern Compiler Design" (http://www.cs.vu.nl/~dick/MCD.html) which implements a basic Haskell interpreter & compiler, so I got an introduction. Anyway, it's a very good learning experience for me to "redo" FRP from scratch, as I encounter all pitfalls (such as the need for memoization when using recursive streams, the need for lazy pattern matching, the space leaks sneaking up on you, etc). Once I get to understand these in detail, I'll try to re-read the existing papers on FRP, which I hardly understood initially :-) Thanks, Peter Stefan O'Rear wrote:
On Wed, Sep 19, 2007 at 10:24:24PM +0100, Neil Mitchell wrote:
Hi Peter,
So I grabbed ghc-6.7.20070824 (=the latest one for Windows I could find) and the "extra-libs", compiled and installed the GLUT package (which I needed), but when I compile my library, I get
Could not find module `Data.Map': it is a member of package containers-0.1, which is hidden
All dependencies etc. have changed when going to 6.7/6.8 - you are probably better off using 6.6.1 for now.
I also don't think that the debugger will help you track down infinite loop style errors. You might be better off posting the code and asking for help.
You said 0% CPU. That's *very* important. It means that you are using the threaded runtime (GHCi?), and that you triggered a blackhole. You should be able to handle this by compiling your program with -prof (do *not* use -threaded!), and running with +RTS -xc. With luck, that will give you a backtrace to the infinite loop.
PS. blackholes are a serious dark corner of GHC's execution model, chances are better than even that if you try to use the debugger for this you will discover a new and (for you) crippling bug. I wouldn't recommend it.
Stefan