我有以下代码:
OptionT(currentFactors.values).map(_.priceHistory.toList)
currentFactors.values // Iterable[Option[A]]
priceHistory // Vector[Double]
但是我收到此错误:could not find implicit value for parameter F: scalaz.Functor[Iterable]
。
将scala.Future
与OptionT
一起使用时遇到了同样的问题,但通过混合scalaz.std.FutureInstances
解决了这个问题。
但是,我无法解决这个问题。我需要做什么?同时,Functor
Iterable
(或Future
)的<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">
<head id="Head1" runat="server">
<title>MySite</title>
<meta property="og:url" content="http://www.example.com" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Your Website Title" />
<meta property="og:description" content="Your description" />
<meta property="og:image" content="http://www.example.com/img/fbbanner.jpg" />
...
是什么?
答案 0 :(得分:2)
Scalaz没有为Functor
提供Iterable
个实例。一个简单的解决方案是更改为List
:
OptionT(currentFactors.values.toList).map(_.priceHistory.toList)
答案 1 :(得分:2)
ScalaZ确实为未来提供了仿函数:
import scalaz.syntax.functor._
import scalaz.std.scalaFuture.futureInstance
val future: Future[Int] = ???
future ∘ {_ + 1}
对于Iterable
,它确实提供了某些类型类(例如Foldable
和Equal
),但不提供Functor
,因为它不符合仿函数法则(Set
是Iterable
)
所以只需要toVector
或toList
来使用集合,ScalaZ就可以使用functor。