I have worked in a (very basic) ray tracing software in the past in C++. Now want to create an advanced system (CSG, radiosity, etc) from scratch.
I find interesting to implement it in Haskell, because I'm learning functional programming too.
Performance is a very important fact in ray tracing algorithms. A Haskell program is in general slower than a C++ program. How much? It depends on the context.
Considerating this context (i.e. a potentially very complex RT) is it viable to work in Haskell?
It might be worth checking out Repa for flat parallelism. You can get pretty good performance if you know what you're doing, but to get great performance it can sometimes require reading and inspecting the core output to see why things aren't being unboxed.
It depends, though. If you're writing C code for absolute performance, you're most likely not going to beat C with Repa, because the alias analysis doesn't seem to be very good at the moment. But unless you're hand-fusing your C code into one monolithic function, I suspect the benefits you get from fusion and the 'free parallelism' in Repa might help it compete.
http://code.ouroborus.net/gloss/gloss-head/gloss-examples/raster/Ray/
http://www.youtube.com/watch?v=jBd9c1gAqWs
And don't use lists. If you don't want to use Repa, I suggest you use Data.Vector.Unboxed.