找不到隐式 [...] 参数 F: scalaz.Functor[Iterable] with Scalaz OptionT

Could not find implicit [...] parameter F: scalaz.Functor[Iterable] with Scalaz OptionT

我有以下代码:

OptionT(currentFactors.values).map(_.priceHistory.toList)

但是我得到这个错误:could not find implicit value for parameter F: scalaz.Functor[Iterable]

我在使用 scala.FutureOptionT 时遇到了同样的问题,但通过混入 scalaz.std.FutureInstances 解决了它。

但是,我无法解决这个问题。我需要做什么?同时,Iterable(或Future)的Functor是什么?

Scalaz 没有为 Iterable 提供 Functor 实例。一个简单的解决方案是更改为 List:

OptionT(currentFactors.values.toList).map(_.priceHistory.toList)

ScalaZ 确实为未来提供了仿函数:

import scalaz.syntax.functor._
import scalaz.std.scalaFuture.futureInstance

val future: Future[Int] = ???
future ∘ {_ + 1}

对于 Iterable 它确实提供了某些类型类(如 FoldableEqual),但不提供 Functor 因为它不满足函子定律(Set 是一个 Iterable) 所以只需 toVectortoList 来使用集合 ScalaZ 确实有仿函数 for.