【发布时间】:2020-03-12 10:04:02
【问题描述】:
我正在尝试编写一个从存储库读取的函数(它返回F[Option[Entry]],其中F 是未来),然后将其转换为F[Option[Element]]。函数convert() 接受Seq[Entry] 并返回ValidatedNel[LoadError, Seq[Element]]。我试图用理解来做到这一点,但是我的问题是函数返回F[Opt[F[Seq[Element]]]]而不是F[Opt[Element]]。我究竟做错了什么?任何帮助都会很棒!
注意:ValidatedNel 是一个猫数据类型
override def findByPath(key: String)(
implicit ME: MonadError[F, Throwable]
): F[Option[Element]] = {
val result = for {
optionEntry <- repo.findByKey(key)
} yield for {
entry <- optionEntry
elements = convert(Seq(entry))
} yield elements.fold(
reason => ME.raiseError[Seq[Element]](ClientError(reason)),
ME.pure
)
result
}
【问题讨论】:
标签: scala monads monad-transformers scala-cats for-comprehension