【发布时间】:2019-03-05 06:10:06
【问题描述】:
假设我有 2 个函子 f0 和 f1,我有一些看起来像的代码 —
f0.map(v0 => f1.map(v1 => f0f1(v0, v1)))
有没有一种方法可以简化这一点,以便我可以使用 for 表达式并使代码更简洁——
for {
v0 <- f0
v1 <- f1
} yield f0f1(v0, v1)
map 函数可以通过一个看起来像这样的语法糖来使用——
implicit class FunctorOps[F[_], A](fa: F[A]) {
def F = implicitly[Functor[F]]
def map[B](ab: A => B): F[B] = F.map(fa)(ab)
}
【问题讨论】:
-
就我而言,它实际上类似于 —
IO[Option[X]] -
我不想真正关心我价值的容器是什么,我想对里面的东西应用转换
-
@LuisMiguelMejíaSuárez 你们都在说什么?
Future突然从哪里来的?Functor的哪个实现有一个map,它接受一个参数?他们都带two arguments,功能通常排在第二位。不清楚您在问什么,请提供minimal reproducible example。 -
@AndreyTyukin 我正在使用 Cats,因为
map被添加为句法糖。 -
@Tushar 然后不清楚添加了什么语法糖。
f0和f1到底是什么。看起来它们不是Functor[F]的实例。
标签: scala functional-programming monads functor