【发布时间】:2019-08-17 21:32:25
【问题描述】:
这是一个小的函数组合,所有这些函数都返回ReaderT:
type FailFast[A] = Either[List[String], A]
def f1:ReaderT[FailFast, Map[String,String], Boolean] = ReaderT(_ => Right(true))
def f2:ReaderT[FailFast, Map[String,String], Boolean] = ReaderT(_ => Left(List("d")))
def f3:ReaderT[FailFast, Map[String,String], Boolean] = ReaderT(_ => Right(true))
def f4:ReaderT[FailFast, Map[String,String], Boolean] = ReaderT(_ => Right(true))
def fc:ReaderT[FailFast, Map[String,String], Boolean] =
f1.flatMap( b1 => {
if (b1)
for {
b2 <- f2
b3 <- f3
b4 <- f4
} yield b4
else ReaderT(_ => Right(true))
})
如何实现fc,以防f1返回Reader,而不是ReaderT:
def f1:Reader[Map[String,String], Boolean] = Reader(_ => true)
现在我必须编写Reader,这正是ReaderT[Id, ...] 和Reader[FailFast, ...]
【问题讨论】:
标签: scala composition monad-transformers scala-cats reader-monad