Scala 当值已经是未来时,使用EitherT.liftF提升未来
我有这样一个价值观:Scala 当值已经是未来时,使用EitherT.liftF提升未来,scala,scala-cats,Scala,Scala Cats,我有这样一个价值观: val ss:Option[未来[列表[错误,文件]]] 我想做的是把它提升到一个EitherT.liftF[Future,Error,List[Error,File]]],所以我做的是: ss匹配{ case Some(value)=>EitherT.liftF[Future,Error,List[Error,File]](value) case None=>EitherT.leftT[Future,List[Error,File]](错误(“失败”)) } 我的问题
val ss:Option[未来[列表[错误,文件]]]
我想做的是把它提升到一个EitherT.liftF[Future,Error,List[Error,File]]]
,所以我做的是:
ss匹配{
case Some(value)=>EitherT.liftF[Future,Error,List[Error,File]](value)
case None=>EitherT.leftT[Future,List[Error,File]](错误(“失败”))
}
我的问题是,我可以使用EitherT.liftF来提升一个已经是未来的值,这是否正确,因为我认为这通常用于需要提升到未来的值,而不是未来本身的值。
future
有一个Monad
实例,出于实际原因,但实际上并不合法。请参见本主题
然而,在许多情况下,例如在您的情况下,它仍然会像预期的那样运行
您也可以通过以下方式实现它:
EitherT(ss.toRight(错误(“失败”)).sequence)
是的,这是正确的,这是使用EitherT.liftF
-检查文档:好吧,一个未来一开始甚至是不可取消的。。。但是要诚实。不知道具体使用未来是否会有问题,我从未在实际代码中使用过未来。