tn-fp-haskell-course

Haskell build shellcheck actionlint Docker

Course on functional programming - Haskell

This course is being given at Telecom Nancy in 2021, 2022, 2023, 2024, 2025, and 2026 in 3A.

If you have attended this course, please join the Telecom Nancy Functional Alumnis LinkedIn group 👈 which I use to post job ads in companies I work with.

Instructions for students

Online version of the slides

Visit https://smelc.github.io/tn-fp-haskell-course/slides/

Development intructions for TPs

For you to do the travaux pratiques smoothly, this repository ships a devcontainer config that points to the docker image published by CI on main. In vscode (with the Dev Containers extension): open this folder, then run Dev Containers: Reopen in Container from the command palette (Ctrl/Cmd+Shift+P). The first run pulls the image and mounts your clone.

Without vscode, you can run the image manually:

docker pull ghcr.io/smelc/tn-fp-haskell-course:latest
docker run -it --rm -v "$(pwd):/workspaces/tn-fp-haskell-course" -p 8000:8000 -p 6419:6419 ghcr.io/smelc/tn-fp-haskell-course:latest bash

If the image is updated, to adopt a new version do:

docker pull ghcr.io/smelc/tn-fp-haskell-course:latest

And the in vscode do Dev Containers: Rebuild Container

Instructions for TP assistants and @smelc

Instructions for authoring the slides

The slides folder uses remark. To display the slides (be it for presenting or for developing them), you need to serve the slides directory with an http server:

python3 -m http.server  # in slides/
# Or use ./run.sh

Now, crawl localhost:8000 and open the various html files.

Note that it’s possible to develop the slides offline, as per the instruction on the remark wiki. But I’ve never done it.

Development instructions without Docker

These instructions are more hermetic than the ones in tps. This is intentional. ⚠️ If you are here to do the travaux pratiques, use the instructions in tps ⬅️

mkdir -p bin/{cabal,ghc,hls}
# Instal cabal, this matches PATH_ADD $(pwd)/bin/ghc/bin in .envrc
ghcup install cabal 3.12.1.0 --isolate $(pwd)/bin/cabal
# Populate GHC, this matches PATH_ADD $(pwd)/bin/ghc/bin in .envrc
# Note that GHC's version number is also in .github/workflows/haskell.yml and in docker/Dockerfile
ghcup install ghc 9.10.3 --isolate $(pwd)/bin/ghc
# Note that HLS's version number is also in docker/Dockerfile
ghcup install hls 2.14.0.0 --isolate $(pwd)/bin/hls

Because there is a cabal.project file that pins the set of packages to a specific timestamp, this project is highly reproducible.

To validate code snippets within slides, see slides/README.md.

Development instructions for developing the container itself

To build the image yourself (e.g. to test local changes to the Dockerfile), tag it with the registry name so the devcontainer picks it up:

docker build -f docker/Dockerfile -t ghcr.io/smelc/tn-fp-haskell-course:latest .

In the past, this course has been funded by Tweag