本教程面向中级 Haskell 开发者,解释了 GTK 4 是 GIMP 工具包的最新版本,而 Adwaita 提供了 GNOME 项目的设计语言,编码了无障碍和样式指南,例如自动适应亮色和深色主题。文中指出,haskell-gi 工具包会从 GTK 库自动生成 Haskell 绑定,使程序员能够使用与底层 C API 镜像的 Haskell 接口,并且待办事项列表的完整源代码可在公开仓库中获取。

一个空的 GTK 应用程序窗口,无内容
待办事项应用程序在添加任何任务之前的初始空窗口floreal.tech

此图像展示了应用程序的起始状态,显示了在输入任何待办事项之前的 UI,如教程的设置部分所介绍。

文章核心介绍了 Model-View-Update(MVU)模式,也称为 Elm 架构,其中 Model 表示应用状态(带有标识符、标题和完成标志的待办事项映射),View 是将该状态转换为 GTK 小部件的函数,而 Update 处理用户消息(如添加新任务或切换完成状态)以生成更新后的模型以及诸如将列表保存到磁盘之类的副作用。一个具体的例子展示了输入 “Buy leeks” 如何触发 Add 消息,更新 Model,并产生一个持久化待办事项列表的 Save 效果。

一个 GTK 窗口,显示一个文本输入字段和一个包含两个待办事项的列表:‘Touch grass’ 和 ‘Buy leeks’
待办事项应用程序在添加 ‘Buy leeks’ 后显示两个项floreal.tech

此图像展示了用户输入 ‘Buy leeks’ 后的用户界面状态,演示了 MVU 示例中描述的 Add 消息处理。

文章承认该方法的一个局限性:View 函数会在每次模型更新时从头重建整个用户界面,这意味着非持久的 UI 状态(如滚动位置或半输入的文本)会丢失。这与讨论中的一条评论相呼应,该评论质疑是否使用了 diffing 魔法,而作者指出,更多功能将在系列的第二部分中介绍。