我正在使用库 Servant 和 Opaleye 在 Haskell 中编写一个基本的 CRUD 应用程序。
Servant 设置 API 端点和 Opaleye 以将数据存储在 DB 中。
假设有一个端点GET /users
从数据库返回所有用户的列表,另一个端点POST /user
创建一个新用户并将其保存在数据库中。
该程序通过启动与 DB 的连接,然后将此连接作为参数传递给这些 API 端点函数(使用 Servant 设置)作为参数。
有人建议我更好的方法是使用 Reader Monad 并将连接存储在环境中。
我能够做到,但我不明白为什么 Reader Monad 是共享环境的首选方式,而不是直接传递参数。
PS - 作为 Haskell 的初学者,我可以使用 Monads,按照教程运行我的程序,但我并不真正了解它们背后隐藏的美丽数学。这就是为什么,我想避免使用单子(直到我完全理解单子背后的想法)。
这是我的代码,顺便说一句。