2015-08-26 4 views
3

Я пытаюсь адаптировать свой код от question. Все хорошо, за исключением того, что мои методы возвращают scalaz.\/ вместо scala.util.Either. Так что теперь я должен написать код обезьяны так:Как применять scalaz.EitherT.fromEither to scalaz. /?

def myFunction:Future[LeftBad \/ RightGood] = ... 

val result = for { 
    x <- fromEither(myFunction.map(_.toEither)) 
} yield { 
    ... 
} 
result.run 
//etc 

Есть ли способ построить EitherT из Future[\/] без toEither вызова?

ответ

3

Вы можете использовать EitherT.eitherT(...) или просто EitherT(...):

import scalaz._, Scalaz._ 

val futDisjunction: Future[String \/ Int] = Future.successful(\/-(5)) 

scala> EitherT(futDisjunction) 
// scalaz.EitherT[scala.concurrent.Future,String,Int] 
+0

Оба варианта работают, но в случае 'EitherT (...)' IntelliJ идея не может понять типы. :(Но тем не менее код работает после сборки sbt. :) – Cherry