Why Functional Programming Matters [REF 1990, John Hughes] has been described as the manifesto for lazy programming, written at a time when enthusiasm for this style was running very high. Less than 20 years later, Oleg Kiselyov published the obituary of Lazy I/O in a series of writings; for more information, visit http://okmij.org/ftp/Streams.html.
In the late 2000s, Kiselyov championed a new way of doing I/O that combines the best of Handle-based I/O (precise control over resources and predictable space requirements) with the best of lazy I/O (decoupling of producers and consumers, high level of abstraction).
Let's get to the root of this style of programming by rephrasing the example we saw earlier. Recall the Chunk
data type and the parseChunk
function:
data Chunk = Chunk {chunk :: String} | LineEnd {chunk :: String, remainder :: String} deriving Show parseChunk :: ByteString -> Chunk parseChunk chunk = if rightS =...