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.
Learn how to:
This course covers the foundations of Haskell, including:
- Simple Constructs
- Algebraic Data Types and Type Classes
- Functional Error-Handling
- Higher-Kinded Type Classes: Functor & Monad
- Higher Kinded Type Classes: Applicative & Traversable
- Async, STM, Streaming, & Resources
- Combining Effects
Available datesDates coming soon
Our team is happy to discuss other options with you.
Contact us at firstname.lastname@example.org 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.
One year of experience with any object-oriented or functional programming language.
- 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
- General shape of algebraic data types
- Differences from OOP modeling
- Polymorphic types: lists, trees
- First-order type classes: Eq, Ord, Show
- Automatic derivation
- 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
- 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