Haskell单子在HappStack中

Haskell单子在HappStack中,haskell,monads,happstack,Haskell,Monads,Happstack,从 当我运行服务器时,peek计数器会增加 我偷看的时候 当我不偷看的时候 有关守则如下: handlers :: ServerPart Response handlers = msum [ dir "peek" $ do c <- query PeekCounter ok $ toResponse $ "peeked at the count and saw: " ++ show (unCounter c)

当我运行服务器时,peek计数器会增加

  • 我偷看的时候
  • 当我不偷看的时候
有关守则如下:

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)
         ]
处理程序::服务器部分响应 处理程序=
msum[dir“peek”$do c由于浏览器每次加载页面时都会请求/favicon.ico,因此计数会额外增加一次。由于最后一个路由是一个全面路由,对/favicon.ico的请求会导致增加

最简单的修复方法是添加nullDir,这样它只对/,

handlers :: ServerPart Response
handlers = 
msum [ dir "peek" $ do c <- query PeekCounter
                   ok $ toResponse $ "peeked at the count and saw: " ++ show (unCounter c)
     , do nullDir
          c <- update (AddCounter 1)
          ok $ toResponse $ "New count is: " ++ show (unCounter c)
     ]
处理程序::服务器部分响应 处理程序=
msum[dir“peek”$do c由于浏览器每次加载页面时都会请求/favicon.ico,因此计数会额外增加一次。由于最后一个路由是一个全面路由,对/favicon.ico的请求会导致增加

最简单的修复方法是添加nullDir,这样它只对/,

handlers :: ServerPart Response
handlers = 
msum [ dir "peek" $ do c <- query PeekCounter
                   ok $ toResponse $ "peeked at the count and saw: " ++ show (unCounter c)
     , do nullDir
          c <- update (AddCounter 1)
          ok $ toResponse $ "New count is: " ++ show (unCounter c)
     ]
处理程序::服务器部分响应 处理程序= msum[dir“peek”$do c
handlers :: ServerPart Response
handlers = 
    msum [ dir "peek" $ do c <- query PeekCounter
                           ok $ toResponse $ "peeked at the count and saw: " ++ show (unCounter c)
         , dir "favicon.ico" $ notFound (toResponse "sorry, no favicon.ico")
         , do c <- update (AddCounter 1)
              ok $ toResponse $ "New count is: " ++ show (unCounter c)
         ]