我想使用自定義ManagerSettings來構建自定義Network.Wreq.Session。我從defaultManagerSettings和managerRawConnection.managerModifyRequest
我想managerModifyRequest使用檔案中運行時已知的配置值。因為我做了很多請求,我寧愿不做很多系統呼叫來從檔案中獲取配置值。
我發現型別managerModifyRequest :: Request -> IO Request有問題。如果無法從引數中獲取配置值,我該如何使用它?
我想過IORefs和MVars將值存盤在記憶體中,但我應該能夠以某種方式將所述 IORef 或 MVar 傳遞給函式......
uj5u.com熱心網友回復:
我對圖書館不熟悉,但我想你需要寫這樣的東西:
-- pseudocode
foo = do
-- create the IORef here
r <- newIORef "hello"
let settings = defaultManagerSettings{
...
managerModifyRequest = \req -> do
-- use the IORef here
s <- readIORef r
putStrLn s
writeIORef r (s "!!")
return req
}
use settings
您不需要將IORef作為附加引數傳遞給managerModifyRequest ,您需要Request -> IO Request在可用的范圍內定義該函式IORef。
或者,使用帶有附加引數的輔助函式,然后將其部分應用于IORef:
-- pseudocode
foo = do
-- create the IORef here
r <- newIORef "hello"
let settings = defaultManagerSettings{
...
managerModifyRequest = myManager r
}
use settings
myManager :: IORef String -> Request -> IO Request
myManager r req = do
-- use the IORef here
s <- readIORef r
putStrLn s
writeIORef r (s "!!")
return req
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427239.html
下一篇:打破回圈
