Email the Author
You can use this page to email Type Classes about Sockets and Pipes.
About the Book
The content that eventually grew into this book began with the question: What exactly is a web server? A satisfactory answer that does not assume substantial background knowledge requires spanning quite a few areas of computing. Fortunately, they all serve as fruitful motivations for simultaneously learning about how to use Haskell, which is the larger objective of the Joy of Haskell collection.
This book is for Haskell learners who have some basic faculty with the language and are now ready to work up to a substantial project. We expect that you understand the basic syntax and can do things like write a case expression to pattern match over a sum type, sequence IO actions in a 'do' block, read code that uses qualified imports, use GHCi, and install Haskell libraries. We do not assume prior knowledge of any particular libraries or GHC language extensions.
The first several chapters introduce the 'bytestring', 'text', and 'network' libraries and are largely dedicated to tearing apart a traditional hello world program, looking underneath the abstract notion of "printing text" to start greeting the world in terms of writing bytes to a file handle. From there, we need only a short hop to sockets, our means of writing bytes across great distances.
The language a web server speaks is the Hypertext Transfer Protocol (HTTP), which this book explores in great detail. We encourage readers to follow along in reading the official definition of HTTP (RFC 7230 published by the Internet Engineering Task Force) as we implement the specification in Haskell. Most parts of the code we present will fall into one of two categories:
- the "pure" functions for encoding and decoding HTTP messages, which will closely acquaint us with the HTTP message format and the 'bytestring' and 'attoparsec' libraries;
- the "operational" aspects of the server: accepting connections with the 'network' library, forking threads, handling exceptions, and streaming data using the 'pipes' library.
While high-level libraries make it possible to create web applications without detailed knowledge of HTTP, we believe that a full understanding of the underlying layers we build upon helps us use a platform more effectively. By studying HTTP we also gain an appreciation for what it is and is not good for, and for what applications we might stand to benefit from choosing a different network protocol instead.
About the Author
Julie Moronuki wrote an extensive book on Haskell while leading a thriving Haskell meetup in Austin. She has a master’s degree in linguistics and taught English, English as a second language, philosophy, linguistics, and medical transcription for over ten years. When she is not writing Haskell or writing about Haskell, she homeschools her two children, pickles everything in sight, and adopts too many pets.
Chris Martin has been writing software for a decade, most recently as a blockchain engineer for Hijro and previously as cofounder and CTO of Fold. He has a master’s degree in computer science from Georgia Tech, and has worked for Georgia Tech Research Institute. Chris tries to increase public awareness of Haskell, NixOS, and the power of good documentation. He enjoys barefoot running, sour beers, and arguing with Julie about math.
Together they run Mission Valley Software.