无法使用Scalaz OptionT

时间:2016-08-26 22:01:50

标签: scala functor scalaz

我有以下代码:

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.FutureOptionT一起使用时遇到了同样的问题,但通过混合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" /> ... 是什么?

2 个答案:

答案 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,它确实提供了某些类型类(例如FoldableEqual),但不提供Functor,因为它不符合仿函数法则(SetIterable) 所以只需要toVectortoList来使用集合,ScalaZ就可以使用functor。