Ein Haskell-Entwickler hat eine einfache To-Do-App mit GTK 4 und der Adwaita-Bibliothek erstellt, und das Tutorial erklärt, wie man ein Modell verwaltet, Nachrichten behandelt und eine Ansicht im Elm-Architekturstil erstellt, wobei der Code für fortgeschrittene Haskeller leicht verständlich bleibt.
Das leere Fenster
Das Tutorial beginnt mit einem minimalen Fenster. Der Entwickler erstellt ein Adwaita-„Application“-Objekt, das Ressourcen verwaltet, einschließlich Adwaita-Stylesheets. Der folgende Codeausschnitt richtet das Fenster mit einem Titel, einer Größe und einer Werkzeugleiste ein:
haskell
app <- new Adw.Application [#applicationId := "tech.floreal.TodoApp"]
on app #activate (activate app)
Gio.applicationRun app Nothing
Inside the activate function, the window is created and shown:
haskell
window <-
new Adw.ApplicationWindow
[ #application := app
, #title := "Todos"
, #defaultWidth := 480
, #defaultHeight := 640
, #content := toolbar
]
Gtk.windowPresent window
Das ist das gesamte Fenster, Titel und Abmessungen.
Elm-Architektur in Haskell
Das Tutorial erklärt die Elm-Architektur anhand von drei Konzepten: Modell, Ansicht und Aktualisierung. Das Modell hält den Zustand der App vor, die Ansicht wandelt das Modell in eine Benutzeroberfläche um, und die Aktualisierungsfunktion ändert das Modell basierend auf Nachrichten. Der Code verwendet Datentypen, um den Zustand und die Aktionen darzustellen.
Hier ist definiert, wie der Zustand festgelegt ist:
„`haskell newtype TodoId = TodoId Word deriving stock (Show) deriving newtype (Eq, Ord)
data Todo = Todo { id :: TodoId , title :: Text , done :: Bool } deriving stock (Eq, Show)
data Model = Model { todos :: Map TodoId Todo , nextId :: TodoId } deriving stock (Eq, Show) „`
Nachrichten werden als eine bekannte Menge von Benutzerinteraktionen dargestellt:
haskell
data Message
= Add Text
| SetDoneStatus TodoId Bool
deriving stock (Eq, Ord)
The update function takes a Message and a Model, then returns a new Model and a list of Effects. The Effects represent actions like saving the to-do list to disk.
Testen in GHCi
Das Tutorial ermutigt Leser, den Code in GHCi, dem Haskell-Interpreter, zu testen. Hier ist ein Beispiel, wie eine Sitzung aussehen könnte:
ghci
ghci> let (m1, e1) = update (Add "Buy leeks") init
ghci> e1
[Save [Todo {id = TodoId 0, title = "Buy leeks", done = False}]]
Dann wird der Status geändert:
ghci
ghci> let (m2, e2) = update (SetDoneStatus (TodoId 0) True) m1
ghci> e2
[Save [Todo {id = TodoId 0, title = "Buy leeks", done = True}]]
Das Zurücksetzen des Status auf True erzeugt keine Effekte, sodass die Liste leer bleibt.
Was dieses Tutorial richtig macht
Die Stärke des Tutorials liegt in seiner Klarheit. Es erklärt jedes Element der Elm-Architektur, bevor es den Code zeigt, sodass Datentypen und Funktionen als Erklärungen und nicht als Rätsel ankommen. Die Verwendung von Datenstrukturen für Nachrichten und Effekte macht das Verhalten der App auf einen Blick sichtbar.
The code is also clean. The update function is short and easy to follow, and the use of the withTodos helper keeps the code focused on what it is doing.
Das Tutorial versucht nicht, eine eingehende Einführung in GTK oder Haskell zu sein. Es setzt Grundkenntnisse voraus und konzentriert sich auf die Architektur. Diese Konzentration macht es zu einem guten Einstiegspunkt für Entwickler, die funktionale Ideen auf UI-Arbeit anwenden möchten.
Das Fazit
Dies ist ein solides Stück technisches Schreiben. Es erklärt eine komplexe Architektur in einfachen Worten, untermauert sie mit funktionierendem Code und gibt den Lesern einen klaren Weg vor. Der vollständige Code ist auf GitHub unter Floreal-Technologies/adwaita-todo verfügbar.
Für alle, die neugierig auf den Aufbau von Apps in Haskell sind, ist dies ein guter Ausgangspunkt.
Wesentliche Fakten: – Projekt: Erstellung einer GTK-Anwendung in Haskell, Teil 1 – Autor: Feriel Choutri de Tarlé – Code: Verfügbar auf GitHub unter Floreal-Technologies/adwaita-todo – Architektur: Elm-Stil Model-View-Update – Bibliotheken: GTK 4, Adwaita, haskell-gi – Schwierigkeitsgrad: Fortgeschrittenes Haskell
Steps to follow:
1. Test the update function in GHCi.
2. Build your own small app using the same pattern.
Quellenmaterial: „Erstellung einer GTK-Anwendung in Haskell, Teil 1“, floreal.tech.
Das Notizbuch abonnieren.
Die besten Geschichten des Tages und jedes neue Urteil, in klarem Deutsch, um sieben im Postfach. Eine Mail am Tag, nicht mehr.

