我正在尝试通过开发类似 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/