项目作者: Alexey8127

项目描述 :
Generic monad transformer using scalaz library
高级语言: Scala
项目地址: git://github.com/Alexey8127/generic-monad-transformer.git
创建时间: 2017-11-09T19:11:54Z
项目社区:https://github.com/Alexey8127/generic-monad-transformer

开源协议:MIT License

下载


generic-monad-transformer

Generic monad transformer using scalaz library

Simple usage example of generic monad transformer with 4 nested monads:

  1. object Example extends App {
  2. type EitherString[A] = String \/ A
  3. val nestedMonads: Future[EitherString[Option[List[Int]]]] = List(1,2,3).some.right[String].pure[Future]
  4. val result =
  5. nestedMonads
  6. .composeMonads4 // MonadWrapper4[Future, EitherString, Option, List, Int]
  7. .map(_ * 3) // MonadWrapper4[Future, EitherString, Option, List, Int]
  8. .up // MonadWrapper3[Future, EitherString, Option, List[Int]]
  9. .map(_.filter(_ == 4).sum) // MonadWrapper3[Future, EitherString, Option, Int]
  10. .up // MonadWrapper2[Future, EitherString, Option[Int]]
  11. .up // MonadWrapper1[Future, EitherString[Option[Int]]]
  12. .map(_.fold(identity, _.map(_.toString).getOrElse("oops!"))) // MonadWrapper1[Future, String]
  13. .map2(_ => Future.successful(20)) // MonadWrapper1[Future, Int]
  14. .run // Future[Int]
  15. result.onComplete(println)
  16. }