我认为这很容易,但我遇到了找不到Monix任务的FlatMap或Functor的问题。我使用"类型别名"来简化长类型签名,但在for compression中,我收到了一个"找不到隐式值"错误。如果我删除了类型别名,那么它就起作用了,因为Monix支持cats。有人会建议编译器如何告诉TaskEather是Monix Task,并且可以使用Monix Task提供的cats实例吗。类型别名:
type TaskEither[A] = Task[Either[Erratum, A]]
发生错误的方法:注意:getBotForUser和processBotDetails都封装在类似于findCreateBot方法的Kleisli中
def findCreateBot(msg: Routing): Kleisli[TaskEither, DBRepo[MySQLProfile, ServiceConfig[Config]], ActorRef] ={
import Task._
for {
bot <- XmppRepository[MySQLProfile, ServiceConfig[Config]].getBotForUser(msg.routingHeader.to.userID)
botRef <- processBotDetails(bot)
} yield botRef
}
错误消息:
XMPPGateway.scala:61:14: could not find implicit value for parameter F: cats.Functor[MyTypes.TaskEither]
[error] botRef <- processBotDetails(bot)
[error]
^
错误消息:
XMPPGateway.scala:60:11: could not find implicit value for parameter F: cats.FlatMap[MyTypes.TaskEither]
[error] bot <- XmppRepository[MySQLProfile, ServiceConfig[Config]].getBotForUser(msg.routingHeader.to.userID)
[error]
^
如果您使用cats,则必须导入cats.data_导入cats.implicits._