我有一个ConnectionIO[Option[Int]]
和映射Option
来产生ConnectionIO[Option[String]]
一个查询,Some[Int]
否则保持Nones. I was able to do this with a
匹配comprehension and a
`:
def findWidgetByOwner(name: String): ConnectionIO[Option[String]] = for {
opt <- sql"SELECT owner_id FROM owners WHERE name = $name".query[Int].option
widget <- opt match {
case None => None.pure[ConnectionIO]
case Some(id) => sql"SELECT widget_name FROM widgets WHERE owner_id = $id".query[String].option
}
} yield widget
我知道我被ConnectionIO
容器绊倒了,但我找不到更干净的映射方法来转换ConnectionIO[Option[Int]]
为ConnectionIO[Option[String]]
.