HappStack中的Haskell Monads msum
|
从
http://happstack.com/docs/crashcourse/HappstackState.html
当我运行服务器时,窥视计数器增加了
1当我偷看
2当我不偷看
有问题的相关代码是:
handlers :: ServerPart Response
handlers =
msum [ dir \"peek\" $ do c <- query PeekCounter
ok $ toResponse $ \"peeked at the count and saw: \" ++ show (unCounter c)
, do c <- update (AddCounter 1)
ok $ toResponse $ \"New count is: \" ++ show (unCounter c)
]
但是,当我将其修改为
handlers :: ServerPart Response
handlers =
msum [ dir \"peek\" $ do c <- query PeekCounter
ok $ toResponse $ \"peeked at the count and saw: \" ++ show (unCounter c)
, do ok $ toResponse $ \"Stop here.\"
, do c <- update (AddCounter 1)
ok $ toResponse $ \"New count is: \" ++ show (unCounter c)
]
计数器增加
我偷看时为0
1当我不偷看时
那是预期的行为吗?即使我偷看,感觉好像msum中的第二个monad是“泄漏”。
没有找到相关结果
已邀请:
1 个回复
布埃郝卞簿
为了避免进一步的混乱,我已经对该教程进行了更新。为了确认确实是/favicon.ico请求使事情变得混乱,我们可以显式处理对favicon的请求:
现在我们看到了预期的行为。 总而言之,Happstack没有任何问题。浏览器向非/ peek的网址发出1或2个请求,因此计数增加了一两次。那是应用程序的预期行为。但是,由于人们并不期望/favicon.ico请求,因此也会导致令人惊讶的行为。因此,现在该应用程序已更改为仅具有两个有效的URL / peek和/。其他任何情况都将产生404。 感谢您的举报!