【发布时间】:2018-11-25 11:55:30
【问题描述】:
我在 Haskell 中编写了一个基本的 CRUD 应用程序,使用库 Servant 和 Opaleye。
Servant 设置 API 端点,Opaleye 将数据存储在 DB 中。
假设有一个端点GET /users 返回数据库中所有用户的列表,另一个端点POST /user 创建一个新用户并将其保存在数据库中。
程序通过启动与 DB 的连接,然后将此连接作为参数传递给这些 API 端点函数(使用 Servant 设置)作为参数。
有人向我推荐了一个更好的方法是使用 Reader Monad 并将连接存储在环境中。
我能够做到,但我不明白为什么 Reader Monad 是共享环境的首选方式,而不是直接传递参数。
附: - 作为 Haskell 的初学者,我可以使用 Monads,按照教程运行我的程序,但我并不真正了解它们背后隐藏的美丽数学。这就是为什么,我想避免使用单子(直到我完全理解单子背后的想法)。
这是我的code,顺便说一句。
【问题讨论】:
-
切线注释:“这就是为什么,我想避免使用单子(直到我完全理解单子背后的想法)。” -- 我建议你改用它们。美丽的数学可以等待。
-
并非所有有经验的haskellers都喜欢使用
Reader来传递参数:reddit.com/r/haskell/comments/8p6rjv/… -
@danidiaz 是否有任何 W 使得 所有 有经验的 W 用户更喜欢使用 X i> 做Y?当然,大多数事情都有一个权衡。在 IMO 的情况下,
Reader的好处往往更大。 -
@leftaroundabout 你能写一个收益/成本分析的答案吗?实际上,“使用 monads 是最好的方法......”是一个很好的论点,但我想知道其他优点和缺点是什么。
标签: haskell monads reader-monad