It's based on the same ideas as Pan and some other projects. An image is a function assigning a color to each point in the plane. Similarly, an animation assigns an image to each point in time. Haskell's tools for functional and declarative programming can be used directly on images and animations.
For example, you can draw a red-green gradient like so:
main = saveImage "out.png" (Size 400 400) im where
im (x,y) = cRGB (unbal x) (unbal y) 0
im is the image as a function, mapping an (x,y) coordinate to a color.
unbal is a function provided by Propane, which just maps the interval [-1, 1] to [0, 1].
The source package includes an animated quasicrystal and several other examples. Propane uses Repa for data-parallel array computations. That means it automatically uses multiple CPU cores for rendering, provided the program is compiled and run with threads enabled. That said, it's not yet been optimized for speed in other ways.
This is just a toy right now, but do let me know if you come up with cool enhancements or examples!