【发布时间】:2019-03-23 04:11:05
【问题描述】:
我有一个函数,它返回一个包裹在 Monad 中的值,
produceMessage :: MonadIO m => KafkaProducer -> ProducerRecord -> m (Maybe KafkaError)
我有一些代码可以像这样调用这个函数
err <- produceMessage prod message
return $ Right ()
上面的代码是别人写的,我只是想了解这里发生了什么。这是函数的其余部分
messageSender :: KafkaProducer -> String -> Config.KafkaP (Either KafkaError ())
messageSender prod msg = do
message <- mkMessage Nothing (Just $ pack msg)
err <- produceMessage prod message
--forM_ err print
return $ Right ()
我有三个具体问题,
我很困惑
produceMessage的类型签名是什么意思?类型约束为MonadIO m,这是什么意思?返回类型是
m (Maybe KafkaError),所以这会返回一个包裹在哪个monad中的Maybe值?Right ()是如何出现在这里的?总的来说我真的不是 能够看懂messageSender的最后两行。
【问题讨论】: