- Instructor:
- Lars Brünjes
- TAs
- Karina Lopez
- Robertino Martinez
This is a full-time 8-week course that will take you from zero to a productive Haskell and Smart Contract developer. In this course, we'll learn Haskell (an advanced, purely functional programming language), Marlowe (an ecosystem of tools and languages to enable the development of financial and transactional smart contracts), and Plutus (the smart contract platform of the Cardano blockchain).
Here's a high-level overview of each week's contents:
- Week 1 (Haskell - 07/08): Introduction to Haskell's syntax, core principles, and IO.
- Week 2 (Haskell - 14/08): Testing, common abstractions, tools, and testing.
- Week 3 (Haskell - 21/08): More abstractions, writing non-trivial programs, and data structures.
- Week 4 (Haskell - 28/08): Combining effects, concurrency and parallelism, and Networking.
- Week 5 (Marlowe - 04/09): Write smart contracts with Marlowe.
- Week 6 (Plutus - 11/09): Cardano Blockchain, EUTxO, Plutus tooling and simple Plutus contracts.
- Catchup week (18/09): Rest, catch up and prepare for the final two weeks.
- Week 7 (Plutus - 18/09 or 25/09): Non-trivial Plutus smart contracts and complete Dapps.
- Week 8 (Plutus - 25/09 or 02/10): Final project (chosen by the students) or More Dapps.
To go through this course, you will need:
ghc
(the Haskell compiler) version 9.2.5.cabal-install
and Cabal library (a build tool for Haskell) version 3.6.2.0.- Haskell's Language Server
- A suitable text editor or IDE (e.g., VSCode, (Neo)Vim, Emacs) with proper configuration.
If you want to start working on your own code, we recommend using this template which comes with a development environment ready to go.
If you want to run the examples in this repo, choose the one you prefer:
- Remote development environment: Install the GitPod extension, and click the new "Gitpod" button at the top of the repo.
- Local development environment inside Docker: Make sure you have the latest version of Docker Desktop and VSCode. Open the
examples-haskell
folder in VSCode (not the root of the repo). You'll get a notification about a Dev Container config file. Click on "Reopen in Container". - Local development environment directly on your computer using GHCup: Follow these instructions (all platforms).
- A local Docker instance or online environment provided by the instructors.
Instructions on how to install the necessary software will be available here when needed.
- A local Docker instance or online environment provided by the instructors.
Instructions on how to install the necessary software will be available here when needed.
Lectures (recordings)
ID | Lecture and slides | Assignments | Projects |
---|---|---|---|
Week 01 | |||
Lecture 000 | Welcome | ||
Lecture 010 | Introduction to Cryptocurrencies | ||
Lecture 020 | An Overview of Haskell | A2 | |
Lecture 030 | Datatypes & Functions | A3 | |
Lecture 040 | Polymorphism & Type Classes | -- | |
Lecture 050 | Higher-Order Functions | A5 | |
Packaging & Tools | -- | ||
Lecture 060 | IO | A6 / T1 | |
Week 02 | W1 | ||
Lecture 070 | Testing | ||
Lecture 080 | Abstraction Patterns | ||
Lecture 090 | Concurrency | ||
Lecture 100 | Network Servers | ||
Lecture 110 | Parser Combinators | ||
Week 03 | |||
Lecture 120 | Data Structures | ||
Week 04 | |||
Lecture 130 | More Data Structures | ||
Lecture 140 | Optics | ||
Week 05 | W2 | P1 | |
Lecture 150 | More on Optics | ||
Lecture 160 | More on Monads (MonadT) | ||
Week 06 | W3 | ||
Lecture 170 | Free Monads | ||
Lecture 180 | Generics | ||
Week 07 | W4 | ||
BREAK | |||
Week 08 | W5 | ||
Lecture 190 | Template Haskell | ||
Week 09 | |||
Lecture 200 | Web development | ||
Lecture 210 | Introduction to Marlowe | ||
Week 10 | |||
Lecture 220 | Marlowe Smart Contracts and infrastructure | ||
Lecture 230 | Introduction to Plutus (EUTxO and untyped Plutus) | ||
Week 11 | |||
Lecture 240 | Typed Plutus | ||
Lecture 250 | Handling time and minting with Plutus | ||
Week 12 | |||
Lecture 260 | Testing Plutus contracts | ||
Lecture 270 | Building a Stable Coin Dapp | ||
Week 13 | |||
HOMEWORK | FINAL PROJECT |
Daily assignments are due the next day.
Weekly homework is due Mondays before the lecture, one week after they have been handed out.
All submissions are via GitHub Classroom.
If you find a defect in one of the sample programs or slides (typos included), please, open an issue on this GitHub repository.
- IOG Academy. Haskell Course. YouTube.
Beginner-friendly Haskell course.
We have read most of these books and they provide good information for beginners.
- Lipovača M. Learn You A Haskell For Great Good!. San Francisco: No Starch Press; 2012.
Beginner-friendly book with lots of examples.
- O'Sullivan B, Stewart D, Goerzen J. Real World Haskell. Farnham: O'Reilly; 2009.
A lot of real-world techniques, just a little bit outdated at this point.
- Bird R. Algorithm Design With Haskell. Cambridge University Press; 2020.
Learn how far you can get with immutable data, to implement almost all standard algorithms.
- Thibaut C. Texas Hold'em: The Little Haskeller.leanpub.com; 2019.
A long article, written in the Question and Answer format. Like the Little Schemer.
- Penner C. Optics By Example: Functional Lenses In Haskell. leanpub.com; 2020.
The only book on optics.
- Haskell Org. More resources at Hakell's official website.
It contains dozens of resources from various sources.
-
IOG. PlutusTx official documentation.
-
IOG. Plutus Core repository.