Voor de oefeningenlessen en projecten van deze cursus zal je zelf Haskell-code en -projecten moeten kunnen compileren en uitvoeren. Om zeker te zijn dat projecten die op jouw computer werken ook bij mij werken, gebruiken we Stack. Stack installeert automatisch de juiste Haskell-versie en dependencies voor elk project. Hierdoor vermijden we “it works on my machine”-problemen.
Om alle benodigde software te installeren, maken we best gebruik van GHCup. GHCup kan Stack, verschillende Haskell-versies (GHC), Cabal en de Haskell Language Server (HLS) installeren. Verder werkt de Haskell-extensie van Visual Studio Code goed samen met GHCup. Hierdoor kan je een groot aantal problemen vermijden tijdens het programmeren in Haskell.
Installatie-instructies vind je op de GHCup website. We vatten ze hieronder kort samen.
Let op tijdens de installatie. Het installatiescript stelt enkele vragen. Antwoord als volgt:
Sluit na de installatie je terminal en open een nieuwe, zodat de commando’s ghcup, stack en ghc gevonden worden.
Op Windows gebruik je WSL2. Installeer eerst WSL2 met Ubuntu en volg daarna de instructies voor Linux hieronder, in je WSL-terminal. Een installatie rechtstreeks op Windows ondersteunen we niet.
Werk je met VSCode, installeer dan ook de WSL-extensie en open je projectmap vanuit WSL (bijvoorbeeld met code . in je WSL-terminal). Zo gebruikt VSCode de Haskell-tools die in WSL geïnstalleerd
zijn.
GHC heeft enkele systeempakketten nodig. Installeer die eerst. Op Ubuntu (ook in WSL2) doe je dat met:
sudo apt update
sudo apt install build-essential curl libffi-dev libffi8ubuntu1 libgmp-dev libgmp10 libncurses-dev
Voor andere distributies (Debian, Fedora, …) vind je de juiste pakketten op de pagina System requirements.
Open daarna een terminal en voer het volgende commando uit:
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
GHC heeft de Xcode Command Line Tools nodig. Heb je die nog niet, installeer ze dan eerst:
xcode-select --install
Open daarna een terminal en voer hetzelfde commando uit als op Linux:
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
Gebruik niet
brew install ghcup. Die installeert enkel GHCup zelf, zonder Stack, GHC, HLS en de Stack-integratie.
Heb je Stack vroeger al geïnstalleerd, of antwoordde je “nee” op de vraag over de Stack-integratie? Stel dan de integratie handmatig in:
mkdir -p ~/.stack/hooks/
curl https://raw.githubusercontent.com/haskell/ghcup-hs/master/scripts/hooks/stack/ghc-install.sh > ~/.stack/hooks/ghc-install.sh
chmod +x ~/.stack/hooks/ghc-install.sh
stack config set system-ghc false --global
Meer details vind je in de Stack-integratiegids van GHCup.
Controleer of alle tools gevonden worden:
ghcup --version
stack --version
ghc --version
haskell-language-server-wrapper --version
Maak daarna een testproject aan en compileer het:
stack new testproject
cd testproject
stack build
stack run
De eerste stack build kan enkele minuten duren, omdat GHCup de GHC-versie van het project downloadt. Die versie kan verschillen van wat ghc --version toont. Dat is normaal: Stack kiest per project de juiste
versie.
Werkt dit, dan is je installatie in orde.
Om Haskell-code te schrijven, heb je niet meer dan een teksteditor nodig. Zelf gebruik ik VSCode (Visual Studio Code), maar je bent hier volledig vrij in. Visual Studio Code is een populaire keuze vanwege de uitgebreide ondersteuning voor Haskell via de Haskell-extensie. Deze extensie biedt functies zoals syntax highlighting, autocompletion en integratie met de Haskell Language Server, wat het schrijven van Haskell-code aanzienlijk kan vergemakkelijken. Bij het eerste gebruik kan VSCode vragen om een Haskell-toolchain en/of HLS te installeren. Volg dan de instructies op het scherm. Installeer GHCup wel eerst: de extensie gebruikt GHCup om HLS te beheren.
Je bent uiteraard ook vrij om andere editors te gebruiken, zoals Vim, Emacs, Zed, IntelliJ, Sublime Text, etc. Deze editors kunnen mogelijks ook allemaal samenwerken met GHCup en Stack, maar de installatie van plugins en de configuratie kunnen verschillen. Aangezien ik zelf geen ervaring heb met deze editors (en dan voornamelijk het Haskell-gedeelte), kan ik hier maar beperkt ondersteuning voor bieden.