在我阅读有关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 次 |
最近记录: |