Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 你缺少什么?_Haskell_Middleware_Happstack - Fatal编程技术网

Haskell 你缺少什么?

Haskell 你缺少什么?,haskell,middleware,happstack,Haskell,Middleware,Happstack,我有一个常见的happstack案例,在这个案例中,我们在列表和中有serverpartresponseMonadPlus。然后msum选择一个没有失败的,并生成并返回响应 我认为,在任何传入请求中都应该执行一些操作,比如检查cookies,准备连接上下文(授权经过身份验证的用户,实现计数等),甚至还没有定义任何路径信息 也许有一些时髦的词我还不知道,特别是对于这样的员工。有人能给我一些建议吗 如果要对每个请求执行某些操作,可以将它们添加到路由代码之前的do语句中。例如: module Main

我有一个常见的happstack案例,在这个案例中,我们在列表和中有
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
来完成您描述的任务: