Bei der Schulung ist es sinnvoll, den Code nachzuvollziehen bzw. eigenen zu schreiben.
Für den Vorkurs bitte Racket installieren, mindestens Version 8.7:
https://download.racket-lang.org/
Je nach Betriebssystem haben sich unterschiedliche Installationsmethoden als universell brauchbar herauskristallisiert. Die Windows-Variante baut auf Docker auf und sollte grundsätzlich auch auf Linux funktionieren, hat aber in der Vergangenheit in speziellen Setups Probleme durch UID-Mapping bereitet.
- Docker installieren
- für macOS und Windows: der Docker-VM ggf. mindestens 6GB Speicher geben
- Visual Studio Code installieren
- die Extension "Dev Containers" (
ms-vscode-remote.remote-containers
) installieren: Auf das Extensions-Icon links klicken, nach "Containers" suchen, "Dev Containers" anwählen, auf "Install" klicken - auf das Datei-Icon links oben klicken
- oben im Menü "View" -> "Command Palette", dort "containers" tippen, "Remote - Containers: Open Folder in Container" selektieren
- das Top-Level-Verzeichnis (Ort des geklonten Repos) selektieren
Da sollte jetzt eine Meldung erscheinen, dass ein Docker-Image gebaut bzw. geladen wird. Das kann eine Weile dauern, sollte aber ohne Fehlermeldung vonstatten gehen.
- In der Datei
haskell-code/Intro.hs
dasmodule
verunstalten (z. B. einen Buchstaben entfernen)
Nach etwas initialer Ladezeit sollten in der Datei Anmerkungen des Linters erscheinen.
Falls im Docker-Container Berechtigungsprobleme auftreten, kann es helfen, das Image bauen zu lassen (statt herunterzuladen). Dazu:
- In devcontainer.json statt
"image"
die Zeile mit"dockerFile"
einkommentieren - Im Dockerfile im dokumentierten Abschnitt die
1000
durch die jeweils eigene UID und GID ersetzen - VSCode neustarten und den Ordner wieder im Container öffnen -> es sollte nun ein Image frisch gebaut werden, was etwas dauert
-
Die Single-User-Variante von Nix installieren (Multi-User funktioniert auch, ist aber schwieriger wieder vom System zu entfernen, falls man das möchte)
-
Flakes einschalten: in der Regel bedeutet das, in
~/.config/nix/nix.conf
die folgende Zeile einzutragen:experimental-features = nix-command flakes
-
cd <path-to>/funar
-
nix develop .#withVSCode
ausführen -> Sie befinden sich nun in einer projektspezifischen, entsprechend gekennzeichneten Umgebung -
Mit
code .
VSCode in diesem Ordner öffnen -
In der Datei
haskell-code/Intro.hs
dasmodule
verunstalten (z. B. einen Buchstaben beimwhere
entfernen) -
Nach etwas Wartezeit (in der unteren Leiste sollte "Processing" oder ähnlich zu sehen sein) sollte etwas rot unterschlängelt werden
- Falls Sie Ihr "eigenes" VSCode nutzen möchten (auf eigene Gefahr), schreiben
Sie bitte einfach
nix develop
(lassen also das.#withVSCode
weg). Sie benötigen dann noch die Extensionhaskell.haskell
. - Diese Instruktionen funktionieren auch auf macOS, allerdings ist dort keine Single-User-Installation von Nix (mehr) möglich.
Falls lokale Installationen (z. B. Docker) nicht funktionieren oder nicht erlaubt sind, ist Gitpod eine mögliche Alternative. Bei Klick auf den Button öffnet sich eine browserbasierte VSCode-Umgebung, in der FUNAR lauffähig sein sollte. Falls ein Popup erscheint, das fragt, wie der Haskell-Language-Server gefunden werden soll, dann bitte "Manually via PATH" auswählen!
... bitte Mike Sperber kontaktieren.
Falls Model-View-Update drankommt, werden wir Elm brauchen. Anleitung zur Installation hier:
https://guide.elm-lang.org/install/
Falls Sie nix
verwenden, dann ist elm
bereits in der Entwicklungsumgebung
(nix develop
) vorhanden.
- Blog Funktionale Programmierung
- Michael Sperber, Herbert Klaeren: Schreibe Dein Programm!
- Sandy Maguire: Algebra-Driven Design
- Michael Pilquist, Rúnar Bjarnason, and Paul Chiusano Functional Programming in Scala
- Scott Wlaschin: Domain Modeling Made Functional
- Alexis King: Parse, Don't Validate
- Markus Schlegel: Denotational Design
- Scott Wlaschin: Moving IO to the edges of your app: Functional Core, Imperative Shell
- Copilot (DSL für Hard-Real-Time-Code, mit C-Code-Generierung)
- Arrows
- Monaden in Kotlin, Vortrag
- Vavr (funktionale Programmierung in Java/Kotlin):
- Wie Effekte strukturieren
- Financial Contracts