refactor

val (t1, t2): (Rep[A], Rep[Option[B]]) ... if ((t2.map(_.B.isDefined) && t1.A < t2.flatMap(_.B)) == LiteralColumn[Boolean](true)) { t2.flatMap(_.B).get } else { t1.A } ↓ val (t1, t2): (Rep[A], Rep[Option[B]]) ... t2.flatMap(_.B).fold(t1.A)…

// 1 _ <- "A" match { case "A" => case _ => ... // 2 _ <- "A" match { case "A" => "a" case "B" => "b" case "C"が追加された場合、//2ではビルド検知できる

}.runFold(Seq.empty[String])((acc, x) => x +: acc).map(_.sortBy(/** sort **/)) }.runWith(Sink.seq).map(_.sortBy(/** sort **/))

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(/** 結果 **/)}