Un desarrollador de Haskell ha creado una sencilla aplicación de tareas pendientes (to-do app) utilizando GTK 4 y la biblioteca Adwaita, y el tutorial explica cómo gestionar un modelo, manejar mensajes y construir una vista al estilo de la arquitectura Elm, todo ello manteniendo el código fácil de seguir para los Haskellers de nivel intermedio.
La Ventana Vacía
El tutorial comienza con una ventana mínima. El desarrollador crea un objeto Adwaita «Application» que gestiona los recursos, incluidas las hojas de estilo de Adwaita. El fragmento de código a continuación configura la ventana con un título, tamaño y una barra de herramientas:
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
Eso es todo lo que tiene la ventana, título y dimensiones.
Arquitectura Elm en Haskell
El tutorial explica la Arquitectura Elm a través de tres conceptos: Modelo, Vista y Actualización. El Modelo contiene el estado de la aplicación, la Vista convierte el Modelo en una interfaz de usuario y la función Actualización cambia el Modelo en función de los Mensajes. El código utiliza tipos de datos para representar el estado y las acciones.
Aquí se explica cómo se define el estado:
«`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) «`
Los Mensajes se representan como un conjunto conocido de interacciones del usuario:
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.
Pruebas en GHCi
El tutorial anima a los lectores a probar el código en GHCi, el intérprete de Haskell. Aquí hay una idea de cómo podría verse una sesión:
ghci
ghci> let (m1, e1) = update (Add "Buy leeks") init
ghci> e1
[Save [Todo {id = TodoId 0, title = "Buy leeks", done = False}]]
Entonces, el estado se modifica:
ghci
ghci> let (m2, e2) = update (SetDoneStatus (TodoId 0) True) m1
ghci> e2
[Save [Todo {id = TodoId 0, title = "Buy leeks", done = True}]]
Establecer el estado nuevamente en Verdadero no produce Efectos, por lo que la lista permanece vacía.
Lo que este tutorial logra
La fortaleza del tutorial radica en su claridad. Explica cada parte de la Arquitectura Elm antes de mostrar el código, de modo que los tipos de datos y funciones se presentan como explicaciones en lugar de misterios. El uso de estructuras de datos para mensajes y efectos hace que el comportamiento de la aplicación sea visible de un vistazo.
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.
El tutorial no pretende ser una introducción profunda a GTK o Haskell. Asume que los lectores conocen los conceptos básicos y se centra en la arquitectura. Ese enfoque lo convierte en un buen punto de partida para los desarrolladores que desean aplicar ideas funcionales al trabajo de interfaz de usuario.
El Resumen
Esta es una buena pieza de escritura técnica. Explica una arquitectura compleja en términos sencillos, la respalda con código funcional y proporciona a los lectores una ruta clara a seguir. El código completo está disponible en GitHub en Floreal-Technologies/adwaita-todo.
Para cualquiera que esté interesado en crear aplicaciones en Haskell, este es un buen lugar para comenzar.
Datos clave: – Proyecto: Creación de una aplicación GTK en Haskell, parte 1 – Autor: Feriel Choutri de Tarlé – Código: Disponible en GitHub en Floreal-Technologies/adwaita-todo – Arquitectura: Modelo-Vista-Actualización al estilo de Elm – Bibliotecas: GTK 4, Adwaita, haskell-gi – Dificultad: Haskell intermedio
Steps to follow:
1. Test the update function in GHCi.
2. Build your own small app using the same pattern.
Material fuente: “Creación de una aplicación GTK en Haskell, parte 1”, floreal.tech.
Recibe El Cuaderno.
Las mejores historias del día y cada veredicto nuevo, en español claro, en tu correo a las siete. Un correo al día, nada más.

