Diese Tutorial-Serie beschreibt die Entwicklung einer Todo-List-Anwendung in Haskell unter Verwendung von GTK 4, der Adwaita-Bibliothek (libadwaita) und dem Toolkit haskell-gi. Es implementiert das Architekturmuster „The Elm Architecture“ (TEA) zur strikten Trennung von Zustand (Model), Benutzeroberfläche (View), Aktualisierungslogik (Update) sowie Seiteneffekten (Effect). Die Anwendung nutzt plattformkonforme GNOME-Designrichtlinien (HIG), responsives Layouting und eine automatische Laufzeit-Umschaltung zwischen hellen und dunklen Themes.
Wichtigste Punkte
Technologie-Stack: Nutzung von Haskell, GTK 4, Adwaita (libadwaita) für GNOME Human Interface Guidelines (HIG) und haskell-gi für automatisierte C-Bindings.
The Elm Architecture (TEA): Dreiteilige Strukturierung aus Model (Zustand), View (UI-Generierung) und Update (Zustandsänderung via Message und Effect für Festplattenspeicherung).
Fensterkonfiguration: Programmierung eines Anwendungsfensters mit den festen Dimensionen von 480x640 Pixeln, dem Titel „Todos“ und integriertem Ressourcenmanagement.
Verwendete Widgets: Einsatz spezifischer Adwaita- und GTK-Komponenten wie EntryRow, ActionRow, Clamp (Größenbegrenzung), ScrolledWindow und ToolbarView.
Zustandslogik & REPL: Funktionale Validierung und Statusübergänge (Add, SetDoneStatus) direkt über die interaktive GHCi (cabal repl) Umgebung getestet.
Laufzeit-Loop: Anbindung der GTK-Hauptschleife mittels GLib.idleAdd und einem IORef zur Referenzhaltung des zentralen Anwendungsmodells.
Diskussions-Highlights
Kritik am GTK-Toolkit: Mehrere Diskussionsteilnehmer bemängeln die Entwicklung von GTK 4 und dem kommenden Wayland-only GTK5, da es plattformübergreifende Implementierungen (macOS, Windows) und das direkte Positionieren von Fenstern erschwere. Als alternative plattformübergreifende Option wird das Projekt iup-go genannt.
Haskell-Paketverwaltung (Arch Linux vs. Fedora): Es entbrennt eine Kontroverse über Arch Linux, das Haskell-Bibliotheken dynamisch verlinkt und dadurch transitive Abhängigkeiten im Gigabyte-Bereich erzeugt (bekannt u.a. von Pandoc). Befürworter empfehlen stattdessen Fedora oder den Einsatz von Build-Tools wie Stack/Cabal.
GUI-Architektur-Alternativen: Anstelle der manuellen GTK-Signalverknüpfung verweisen erfahrene Haskell-Entwickler auf Functional Reactive Programming (FRP)-Frameworks wie react-banana oder reflex für komplexere GUIs.
Code-Korrektur: Kommentatoren weisen auf einen Tippfehler im Code-Beispiel hin (GI.Awd muss korrekt GI.Adw bzw. über das Hackage-Paket gi-adwaita eingebunden werden).
Glossar
Haskell: Eine rein funktionale Programmiersprache mit starker statischer Typisierung.
GTK 4 / libadwaita: Ein plattformübergreifendes UI-Toolkit (GTK) und dessen GNOME-Design-Erweiterung (libadwaita) zur Bereitstellung nativer Oberflächenkomponenten.
The Elm Architecture (TEA): Ein Software-Architekturmuster, das auf reinen Funktionen zur Zustandsverwaltung und UI-Rendering basiert.
haskell-gi: Ein Toolkit, das automatisch Haskell-Sprachbindungen aus C-basierten GObject-Bibliotheken generiert.
GHCi: Die REPL-Umgebung (Read-Eval-Print Loop) des Glasgow Haskell Compilers zum interaktiven Testen von Code.
IORef: Ein veränderlicher Referenztyp im IO-Monadenkontext von Haskell.
Wayland: Ein modernes Anzeigeprotokoll und Fenstersystem für Linux-Desktop-Umgebungen als Nachfolger von X11.
FRP (Functional Reactive Programming): Ein Programmierparadigma zur Verarbeitung zeitlich veränderlicher Ströme von Ereignissen und Werten.