https://github.com/active-group/funar
Materials for FUNAR trainings - previous trainings are archived as branches
https://github.com/active-group/funar
architecture functional-programming haskell racket
Last synced: 9 days ago
JSON representation
Materials for FUNAR trainings - previous trainings are archived as branches
- Host: GitHub
- URL: https://github.com/active-group/funar
- Owner: active-group
- Created: 2019-06-28T20:38:38.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2025-03-27T14:46:50.000Z (28 days ago)
- Last Synced: 2025-04-15T03:15:13.979Z (9 days ago)
- Topics: architecture, functional-programming, haskell, racket
- Language: Haskell
- Homepage:
- Size: 18.7 MB
- Stars: 11
- Watchers: 8
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Technische Vorbereitung
Bei der Schulung ist es sinnvoll, den Code nachzuvollziehen bzw. eigenen zu
schreiben.## Vorkurs
Für den Vorkurs bitte Racket installieren, mindestens Version 8.14:
https://download.racket-lang.org/
## Hauptteil
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.### Via Docker (Windows, macOS, Linux, ...)
- [Docker](https://www.docker.com/) installieren
- für macOS und Windows: der Docker-VM ggf. mindestens 6GB Speicher geben
- [Visual Studio Code](https://code.visualstudio.com/download) 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) selektierenDa 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` das `module` verunstalten (z. B. einen
Buchstaben entfernen)Nach etwas initialer Ladezeit sollten in der Datei Anmerkungen des Linters
erscheinen.#### UID-Remapping-Problem (u. U. nur Linux)
Falls im Docker-Container Berechtigungsprobleme auftreten, kann es helfen, das
Image bauen zu lassen (statt herunterzuladen). Dazu:- In [devcontainer.json](./.devcontainer/devcontainer.json) statt `"image"` die
Zeile mit `"dockerFile"` einkommentieren
- Im [Dockerfile](./.devcontainer/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### Via Nix-Installation (Linux, macOS, vmtl. WSL2)
- Die Single-User-Variante von [Nix
installieren](https://nixos.org/download.html#nix-install-linux) (Multi-User
funktioniert auch, ist aber schwieriger wieder vom System zu entfernen, falls
man das möchte)
- [Flakes einschalten](https://nixos.wiki/wiki/Flakes): in der Regel bedeutet
das, in `~/.config/nix/nix.conf` die folgende Zeile einzutragen:```
experimental-features = nix-command flakes
```- `cd /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` das `module` verunstalten (z. B. einen
Buchstaben beim `where` entfernen)
- Nach etwas Wartezeit (in der unteren Leiste sollte "Processing" oder ähnlich
zu sehen sein) sollte etwas rot unterschlängelt werden#### Anmerkungen
- 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 Extension `haskell.haskell`.
- Diese Instruktionen funktionieren auch auf macOS, allerdings ist dort keine
Single-User-Installation von Nix (mehr) möglich.### Fallback: Gitpod
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](https://gitpod.io/#https://github.com/active-group/funar)
## Elm
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.# Bei Problemen
... bitte Mike Sperber kontaktieren.
# Literatur
- [Blog Funktionale Programmierung](https://funktionale-programmierung.de/)
- Michael Sperber, Herbert Klaeren: [Schreibe Dein Programm!](https://www.deinprogramm.de/sdp/)
- Sandy Maguire: [Algebra-Driven Design](https://leanpub.com/algebra-driven-design)
- Michael Pilquist, Rúnar Bjarnason, and Paul Chiusano [Functional Programming in Scala](https://www.manning.com/books/functional-programming-in-scala-second-edition)
- Scott Wlaschin: [Domain Modeling Made Functional](https://pragprog.com/titles/swdddf/domain-modeling-made-functional/)