An appropriate choice of functional language is also important. Haskell, the language chosen, is a pure, non-strict functional language. Most importantly Haskell incorporates lazy evaluation and lazy lists, which simplify operations on streams by allowing them to be manipulated as lists (see section 3.2). Operations such as pattern matching at the head of a stream or generating streams are possible in a very natural fashion, simplifying the code and making it more readable. In addition, Haskell avoids re-evaluating expressions which have already been evaluated, which undoubtedly contributes to the performance of the system.
Haskell also incorporates arbitrary length integers, modules, and has a good set of I/O libraries. There are a number of implementations of Haskell available. The ones used are described in section 6.2.3.