【发布时间】:2017-01-10 22:52:03
【问题描述】:
我正在尝试使用额外的 Token 参数来扩展仆人的 ClientM monad,我将使用该参数来调用 REST 资源。
type TClient a = ReaderT Token ClientM a
然后我为仆人模式匹配定义了以下内容
get :: Token -> ClientM Text
post :: Token -> Int -> ClientM Text
get :<|> post = client (Proxy :: Proxy MyAPI)
现在我的扩展客户端来玩了。我就是这样使用它的:
getT :: TClient Text
getT = undefined -- implementation to extract token and call 'get'
postT :: Int -> TClient Text
portT = undefined -- implementation to extract token and call 'post'
queries :: TClient Text
queries = do
text1 <- postT 5
text2 <- getT
return (text1 ++ text2)
--| runReaderT and then runClientM
runTClient :: Token -> TClient a -> ClientEnv -> IO (Either ServantError a)
runTClient token tcm env = runClientM (runReaderT tcm token) env
问题是如何更好地实现getT 和postT 函数。
我将发布我当前的解决方案,但希望这里更有经验的haskeller 可以提出更好的解决方案
【问题讨论】:
标签: haskell monad-transformers servant