Rey*_*och 2 haskell middleware servant
所以,我想在我的服务器服务器上添加两个wai中间件.一个用于提供静态文件的中间件,另一个用于记录.
我有我的api defined(router),这就是我启动服务器的方式:
webServer :: IO ()
webServer = run 80 (middleware $ router)
Run Code Online (Sandbox Code Playgroud)
以下是我如何定义我的middleware:
middleware :: Application -> Application
middleware = do
logStdoutDev
staticPolicy $ addBase "static"
Run Code Online (Sandbox Code Playgroud)
现在,如果我把logStdoutDev第一个比我不能提供静态文件,但如果我放staticPolicy第一,我可以提供静态文件,但我失去了记录事件的能力(基本上他们被忽略).
问题是,如何wai在仆人中正确组合中间件.
如果我理解正确,你想要组成两个中间件:logStdoutDev和staticPolicy $ addBase "static".但是你做了什么?
middleware = do
logStdoutDev
staticPolicy $ addBase "static"
Run Code Online (Sandbox Code Playgroud)
它相当于:
middleware = logStdoutDev >> (staticPolicy $ addBase "static")
Run Code Online (Sandbox Code Playgroud)
那么,monad被用过了什么?在middleware有型Application -> Application.所以这是monad读者(->) Application.
表达式logStdoutDev >> (staticPolicy $ addBase "static")等同于\r -> (\_ -> (staticPolicy $ addBase "static") r) (logStdoutDev r).或者如果简化,我们将得到:\r -> (staticPolicy $ addBase "static") r.
你应该这样做:
middleware = logStdoutDev . (staticPolicy $ addBase "static")
Run Code Online (Sandbox Code Playgroud)