Haskell 你缺少什么?
我有一个常见的happstack案例,在这个案例中,我们在列表和中有Haskell 你缺少什么?,haskell,middleware,happstack,Haskell,Middleware,Happstack,我有一个常见的happstack案例,在这个案例中,我们在列表和中有serverpartresponseMonadPlus。然后msum选择一个没有失败的,并生成并返回响应 我认为,在任何传入请求中都应该执行一些操作,比如检查cookies,准备连接上下文(授权经过身份验证的用户,实现计数等),甚至还没有定义任何路径信息 也许有一些时髦的词我还不知道,特别是对于这样的员工。有人能给我一些建议吗 如果要对每个请求执行某些操作,可以将它们添加到路由代码之前的do语句中。例如: module Main
serverpartresponse
MonadPlus
。然后msum
选择一个没有失败的,并生成并返回响应
我认为,在任何传入请求中都应该执行一些操作,比如检查cookies,准备连接上下文(授权经过身份验证的用户,实现计数等),甚至还没有定义任何路径信息
也许有一些时髦的词我还不知道,特别是对于这样的员工。有人能给我一些建议吗 如果要对每个请求执行某些操作,可以将它们添加到路由代码之前的do语句中。例如:
module Main where
import Happstack.Server
main = simpleHTTP nullConf $ do incCounter
mUser <- checkUserAuth
resp <- msum [ part1
, part2
, part3 mUser
]
logResponse resp
return resp
resp <- msum [ part1
, part2
, part3 mUser
, notFound $ toResponse "Sorry, page not found."
]
这几乎总是会发生的。如果其中一个部分匹配,但显式调用了“escape”,那么我很确定logResponse
仍然不会运行。也有办法解决这个问题
但是,简单的回答是,如果您希望某件事情在某个时间发生,只需将它放在您的
msum
代码之前。如果您希望对每个请求采取某些操作,可以将它们添加到路由代码之前的do语句中。例如:
module Main where
import Happstack.Server
main = simpleHTTP nullConf $ do incCounter
mUser <- checkUserAuth
resp <- msum [ part1
, part2
, part3 mUser
]
logResponse resp
return resp
resp <- msum [ part1
, part2
, part3 mUser
, notFound $ toResponse "Sorry, page not found."
]
这几乎总是会发生的。如果其中一个部分匹配,但显式调用了“escape”,那么我很确定logResponse
仍然不会运行。也有办法解决这个问题
但是,简单的回答是,如果你希望某件事在某个时间发生,就把它放在你的
msum
代码之前。我被readCookieValue
行为弄糊涂了。它无法读取-因为cookie还不存在,所以整个monad被认为是失败的。在您的示例中,我必须使用msum
实现checkUserAuth
。感谢您的回答-这非常有用。我并没有立即意识到这一点,所以下面是您如何使用msum
执行您描述的操作:我被readCookieValue
行为弄糊涂了。它无法读取-因为cookie还不存在,所以整个monad被认为是失败的。在您的示例中,我必须使用msum
实现checkUserAuth
。感谢您的回答-它非常有用。我并不马上就明白,所以下面是您如何使用msum
来完成您描述的任务: