在我阅读有关Scalaz遍历功能的每个示例中,完成了以下导入:
import scalaz._
import Scalaz._
Run Code Online (Sandbox Code Playgroud)
看来我不能使用traverseU,直到我import Scalaz._.
Scalaz对象如何注入traverseU我的集合?我完全迷失在参考文档中.
如果我只想要traverse和traverseU方法,我应该导入什么?
因为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)
如果结果类型func不R[X]与Applicative[R],但一些R与Monoid[R]你必须导入Monoid[R]实例隐式方法Applicative.monoidApplicative:
import scalaz.std.anyVal.intInstance
List(1, 2, 3).traverseU{ identity }
// 6
Run Code Online (Sandbox Code Playgroud)
需要注意的是listInstance也MonadPlus[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)
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |