如果我们有这两个功能......
def findUserById(id: Long): Future[Option[User]] = ???
def findAddressByUser(user: User): Future[Option[Address]] = ???
...然后我们可以使用猫OptionT
monad变换器轻松地编写for-comprehension:
for {
user <- OptionT(findUserById(id))
address <- OptionT(findAddressByUser(user))
} ...
我想用这种方式编写序列的未来,如下:
def findUsersBySomeField(value: FieldValue): Future[Seq[User]] = ???
def findAddressesByUser(user: User): Future[Seq[Address]] = ???
for {
user <- SeqT(findUsersBySomeField(value))
address <- SeqT(findAddressesByUser(user))
} ...
但我在Cats或Scalaz中找不到任何SeqT
实现。是否存在某些monad变换器的实现,或者我自己需要编写monad变换器?并不是说太难了,只是不想重新发明轮子。
(问题开头的例子来自this article)