Gain a solid understanding of the fundamental concepts of Haskell, a powerful functional programming language, in this introductory course with Alejandro Serrano.
Haskell is an advanced open source language that’s purely functional. It features concise built-in concurrency and parallelism, thousands of libraries, and a rich ecosystem making it a valuable tool for any programmer.
Learn the basic concepts, techniques of this mathematical-based language, change the way you think about programming, and start developing concise programs with increased type safety.

This in-depth course combines virtual classroom lectures and hands-on guided exercises designed to introduce attendees to all the concepts, ideas, techniques, and libraries that they’ll need to start developing their first programs in Haskell.
This course is run virtually over 4 half‑day sessions.
Our virtual courses offer the same expert-led, hands-on experience we've offered since 2013 — accessible from the comfort of your own home (office).
|
![]() |
Learn how to:
This course covers the foundations of Haskell, including:
- Simple Constructs
- Algebraic Data Types and Type Classes
- Input/Output
- Functional Error-Handling
- Higher-Kinded Type Classes: Functor & Monad
- Higher Kinded Type Classes: Applicative & Traversable
- Laziness
- Async, STM, Streaming, & Resources
- Combining Effects
Available dates
Dates coming soonOur team is happy to discuss other options with you.
Contact us at sales@skillsmatter.com and mention ref:
Private tuition and large-group discounts are also available. Find out more here.
Who should take this workshop?
This course is for developers who want to straighten their knowledge in Haskell.
Prerequisites
One year of experience with any object-oriented or functional programming language.
Workshop Outline
Simple Constructs
- Simple definitions
- Definitions using pattern matching and guards
- Local bindings with let and where
- Pattern matching over lists, recursion
- Higher-order functions: maps and folds
- Anonymous functions and partial application
Algebraic data types and type classes
- Record types, and record syntax
- Enumerations
- General shape of algebraic data types
- Differences from OOP modeling
- Polymorphic types: lists, trees
- First-order type classes: Eq, Ord, Show
- Automatic derivation
Input/output
- Concept of purity and tagging with IO
- Do blocks: pure vs. impure values
- Basic console and file input/output
- Working with callbacks (example using network-simple)
- Small introduction to streaming
Functional error handling
- Maybe and Either as polymorphic types
- Combinators to work on the happy path
- Dealing with errors in IO: exceptions
Higher-kinded type classes: Functor and Monad
- Looking at commonalities in maps -> Functor
- Notion of type constructors and higher-kinded classes
- Simulating stateful computations in Haskell
- Looking at commonalities in bind -> Monad
- Monadic utilities
Higher-kinded type classes: Applicative and Traversable
- Applicative as generalizing map to n-ary functions
- Applicative style programming
- Generalizing map to mapM to traverse
Laziness
- Execution model with thunks
- Cyclic and infinite structures
- Forcing execution to avoid leaks
- IO, exceptions and laziness
Async, STM, streaming, resources
- Spawning new computations with async
- Concurrent execution, racing
- Concurrent access with Software Transactional Memory
- Managing single resources
- Managing pools of resources