Haskell 网络服务器 : maintaining application state

标签 haskell functional-programming happstack

我正在尝试通过开发类似 Web 应用程序的服务来更加熟悉 Haskell。

假设我正在开发一个网络服务器,并且我想在请求之间保持持久状态;例如,计数器。 Haskell 的做事方式是什么?

我遇到了这个discussion在我的谷歌搜索上。所提出的解决方案看起来像是一个关于不该做什么的很好的例子。

我的一个想法是让请求处理程序接受 MVar:

requestHandler :: MVar State -> IO (Maybe Response)

注册处理程序时,可以使用在 main 中创建的 MVar 对其进行柯里化(Currying)。

一定有更好的方法。我忍不住认为我正在以非功能性的方式解决这个问题。

谢谢!

最佳答案

您可能想要acid-state ,它准确地为您提供了:Haskell 数据类型的持久状态。我链接的文档甚至以请求计数器开始,就像您所要求的那样。

请注意,MVar 不是持久的;当服务器重新启动时,计数器将被重置。如果这确实是您想要的行为,我建议您使用 TVar反而;这样您就可以自动更新计数器,而无需锁定或随之而来的死锁风险。

关于Haskell 网络服务器 : maintaining application state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14528877/

相关文章:

haskell - 可靠地等待多个异步?

haskell - 如何从本地 Happstack 服务器提供 MathJax 服务?

c++ - cryptopp 外部库依赖

haskell - 在三便士 Canvas 上绘制图像

haskell - TVar 和 TMVar 之间的区别

haskell - 模式匹配时不同数量的参数可能

haskell - 用Haskell编写传递闭包关系函数

python - 是否有一个 python 函数可以返回一个添加了新键的新字典,比如 clojure 中的 assoc?

haskell - 如何处理 Haskell 包的配置依赖范围已过期?