モナドトランスフォーマー (1)
ListとList[Option]とOptionの共存
val intList: List[Int] = List(1, 2, 3, 5) val strOptList: List[Option[String]] = List(Some("a"), Some("c"), None, Some("d")) val option: Option[Int] = Option(1) val t: OptionT[List, (Int, String, Int)] = for { i <- OptionT.liftF(intList) s <- OptionT(strOptList) o <- OptionT.fromOption[List](option) } yield (i, s, o) // List(Some((1,a,1)), Some((1,c,1)), None, Some((1,d,1)), Some((2,a,1)), Some((2,c,1)), None, Some((2,d,1)), Some((3,a,1)), Some((3,c,1)), None, Some((3,d,1)), Some((5,a,1)), Some((5,c,1)), None, Some((5,d,1))) println(t.value)