如何在scalaz中组成monad变换器

时间:2015-01-28 19:28:06

标签: scala scalaz

如何编译或执行类似的操作?

import scala.concurrent.Future
import scalaz._
import Scalaz._

val ee: Future[Unit \/ Option[Int]] = Future(\/-(Option(1)))
OptionT.optionT(EitherT.eitherT(ee))

1 个答案:

答案 0 :(得分:0)

您只需要明确传递类型(同样OptionT.optionT似乎做了稍微不同的事情):

//could use a type lambda, but this is (IMO) slightly clearer
type FutureEither[A] = EitherT[Future, Unit, A]
new OptionT[FutureEither, Int](EitherT.eitherT[Future, Unit, Option[Int]](ee))

(我应该提一下我的scalaz-transfigure库作为一种稍微轻一些,更具推理性的方法来做monad变换器所做的事情;虽然它并不是非常成熟但是