Haskell Webserver:维护应用程序状态

Dav*_*vid 7 haskell functional-programming happstack

我正在尝试通过开发web-app-ish服务来更熟悉Haskell.

假设我正在开发一个Web服务器,我希望在请求之间保持持久状态; 例如,一个柜台.什么是Haskell的做事方式?

我在Google搜索中遇到了这个讨论.建议的解决方案看起来像是不该做的一个很好的例子.

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

requestHandler :: MVar State -> IO (Maybe Response)
Run Code Online (Sandbox Code Playgroud)

注册处理程序时,可以使用在main中创建的MVar进行curry.

肯定有更好的办法.我不禁想到我正在以非功能性的方式解决这个问题.

谢谢!

Dag*_*Dag 4

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

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