Arrowised Materials in Purely Functional Ray Tracing

This article assumes at least a basic understanding of arrows as they are implemented in Haskell. It you haven't come across them before, I recommend this excellent tutorial by Ertugrul »