我应该为Scalaz的遍历功能导入什么

Ant*_*ine 7 scala scalaz

在我阅读有关Scalaz遍历功能的每个示例中,完成了以下导入:

import scalaz._
import Scalaz._
Run Code Online (Sandbox Code Playgroud)

看来我不能使用traverseU,直到我import Scalaz._.

Scalaz对象如何注入traverseU我的集合?我完全迷失在参考文档中.

如果我只想要traversetraverseU方法,我应该导入什么?

sen*_*nia 8

因为collection traverseU func你必须为traverseU(隐式方法TraverseOps),隐式实例Traverse[C](对于collection类型C)和Applicative[R](对于func结果类型R[X])导入语法.

例如:

import scalaz.syntax.traverse.ToTraverseOps // F[A] => TraverseOps[F, A]
import scalaz.std.list.listInstance // Traverse[List]
import scalaz.std.option.optionInstance // Applicative[Option]

List(1, 2, 3).traverseU{ Option(_) }
// Some(List(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)

如果结果类型funcR[X]Applicative[R],但一些RMonoid[R]你必须导入Monoid[R]实例隐式方法Applicative.monoidApplicative:

import scalaz.std.anyVal.intInstance

List(1, 2, 3).traverseU{ identity }
// 6
Run Code Online (Sandbox Code Playgroud)

需要注意的是listInstanceMonadPlus[List],Zip[List],Unzip[List],等.

因此,如果你只是Traverse[List]出于某种充分的理由,你必须这样做:

implicit val traverseList: scalaz.Traverse[List] = scalaz.std.list.listInstance
implicit val applicativeOption: scalaz.Applicative[Option] = scalaz.std.option.optionInstance
Run Code Online (Sandbox Code Playgroud)