In this training session, we will cover modern Haskell programming best practices, with an emphasis on creating real world, production-ready applications. This will include program structure, recommended libraries, and tooling configuration. The techniques will be relevant to most programming domains, including network programming, concurrent applications, and data science. Familiarity with Haskell syntax and basic programming ability is assumed, and ample Q&A sections will be available.
Many developers are at a point where they are somewhat familiar with the syntax and features of the Haskell programming language, but struggle using this knowledge to build real-world, production applications. Building real-world software requires more than just familiarity with the language — it requires knowledge of how to structure large-scale Haskell programs, how to use the best libraries in the vast Haskell ecosystem to solve the problems of modern application development, and how to setup and configure tooling.
This course takes Haskell developers from being able to write toy programs and Haskell snippets, to knowing how to structure and develop complex, real-world applications that compete with the best of what imperative and OOP have to offer, but with faster time-to-market and fewer bugs.
After attending this workshop, attendees will be able to build commercial-grade applications in Haskell, confident they are structuring programs in a scalable way, and leveraging well-supported, production-ready, high-performant Haskell libraries.
Companies who wish to train their Haskell developers on best practices for building commercial software (quickly and with fewer bugs) are encouraged to send their teams to this workshop.
Concepts & Skills
Attendees will learn the following concepts:
- Monadic effects & MTL
- Non-strict evaluation, strictness
- Debugging, profiling, and optimizing
- Structure of Haskell programs
- Structure of Haskell libraries
- Design patterns for Haskell
- Performance "gotchas"
- Best practices for type classes, MTL, Free, IO, non-strictness, strictness, etc.
Attendees will learn the following skills:
- How to use MTL to compose different monadic effects
- How to detect and fix time and space leaks caused by laziness
- How to read, understand, and use libraries
- How to debug, profile, and optimize Haskell programs
- How to introduce strictness to increase performance
- How to use streaming libraries like Pipes, Conduits, for high-performance processing
- How to structure Haskell programs
- How to structure Haskell libraries
- How to select and evaluate Haskell libraries
- How to use poorly-documented Haskell libraries
- How to use Haskell build tools for CI, CD
Michael Snoyman is the founder and lead developer of multiple Haskell open source projects, including Yesod, Conduit, Stack, and Stackage. His main interests are creating developer-friendly, high performance libraries that minimize bugs. Michael is VP of Engineering at FP Complete, where he focuses on using Haskell and modern devops to help projects make it to market faster and with fewer bugs.