Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 wai中间件-如果第一个应用程序返回404,如何运行应用程序?_Haskell_Haskell Wai - Fatal编程技术网

Haskell wai中间件-如果第一个应用程序返回404,如何运行应用程序?

Haskell wai中间件-如果第一个应用程序返回404,如何运行应用程序?,haskell,haskell-wai,Haskell,Haskell Wai,我正在尝试将两个wai应用程序“连接”在一起。基本上,第一个应用程序将提供404未找到响应或非404未找到响应的响应。我想添加第二个应用程序,如果第一个案例(第一个应用程序返回一个404)存在,它将尝试处理该请求 但是,查看应用程序的类型: type Application = Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived 不清楚如何检查响应?我不是以responseRecieved作为

我正在尝试将两个wai
应用程序“连接”在一起。基本上,第一个应用程序将提供404未找到响应或非404未找到响应的响应。我想添加第二个应用程序,如果第一个案例(第一个应用程序返回一个404)存在,它将尝试处理该请求

但是,查看
应用程序的类型

type Application = Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived
不清楚如何检查响应?我不是以
responseRecieved
作为最终结果吗?它似乎不包含任何响应代码。如下所示:

xyzMiddle :: (Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived) ->
             (Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived)
xyzMiddle app req respond = do
  zzz <- (app req respond)
  pure zzz
xyzMiddle::(请求->(响应->IO响应已接收)->IO响应已接收)->
(请求->(响应->接收IO响应)->接收IO响应)
XYZMIDLE应用程序请求响应=do
zzz我忽略了这个
(Response->IO ResponseReceived)
,因为这是在
IO
上下文中-这是我们可以运行第二个应用程序的地方。也就是说,要检查
响应
,我们可以执行以下操作:

xyzMiddle :: (Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived) ->
             Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived
xyzMiddle app req respond = app req (\r -> do
  print $ show $ responseStatus r
  respond r)