我已经开始使用Cats学习函数式编程,并且坚持使用flatMapping(合并)应用程序F[List]
。
在纯Scala中,非常简单的就是这样映射列表列表:
val animals = List("Dog", "Cat", "Bird")
def getBreads(animal: String): List[String] = ...
val allAnimalsBreads = animals.flatMap(animal => getBread(animal)) // this will be just List[String]
如果所有内容都用应用程序包装,该怎么办?:
val animals = List("Dog", "Cat", "Bird").pure[F]
def getBreads(animal: String): F[List[String]] = ...
val allAnimalsBreads = ? // this should be F[List[String]]
每个应用程序都有一个映射操作,因此您只需要使用flatMap映射内部值(List
):
val allAnimalBreads = Applicative[F].map(_.flatMap(getBread))