Chapter 2. Patterns for I/O
"I believe that the monadic approach to programming, in which actions are first class values, is itself interesting, beautiful and modular. In short, Haskell is the world's finest imperative programming language" | ||
--Tackling the Awkward Squad, Simon Peyton Jones |
It is remarkable that we can do side-effecting I/O in a pure functional language!
We start this chapter by establishing I/O as a first-class citizen of Haskell. A the bulk of this chapter is concerned with exploring three styles of I/O programming in Haskell.
We start with the most naïve style: imperative style. From there, we move on to the elegant and concise "lazy I/O", only to run into its severe limitations. The way out is the third and last style we explore: iteratee I/O.
As a binding thread, we carry a simple I/O example through all three styles. We will cover the following topics:
- I/O as a first-class citizen
- Imperative I/O
- Lazy I/O
- The problem with...