scalaz

yield for / OptionT#run

yield for のリファクタメモしとく ついでにOptionTうんぬん、 // action: OptionT[DBIO, DBIOAction[Int, ... val action = for { i <- OptionT(DBIO.successful(Option(1))) } yield for { ii <- DBIO.successful(i) } yield ii // DBIO[Option[DBIO[Int..…

Future[Option[Future

val fof = Future[Option[Future[Int]]] val fo1 = fof.flatMap({ case None => Future.successful(None) case Some(a) => a.map(Some(_)) }) val fo2 = fof.flatMap(opt => Future.sequence(opt.toSeq).map(_.headOption)) // Option拡張されんやつ fof.fla…

emap either

hoge().emap(r => /** 条件 **/ either /** 結果 **/ or /** 結果 **/) hoge() flatMap { r => if /** 条件 **/ Future.successful(/** 結果 **/) else Future.failed(/** 結果 **/)}

toNel

List#toNel NotEmptyListを返す。 NonEmptyListを使えば空リストでは無いことが保証されるのでhead, tailが必ず成功する。 reduceLeft, reduceRightでも同様に確実に成功する。 val hoges = List(hoge1, hoge2) //def toNel: Option[NonEmptyList[A]] = l.to…