在我阅读的有关Scalaz遍历功能的每个示例中,都完成了以下导入:
import scalaz._
import Scalaz._
直到我
traverseU
,我似乎才能使用import Scalaz._
。Scalaz对象如何将
traverseU
注入(inject)我的收藏集?我完全迷失了引用文档。如果我只想要
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))
如果
func
的结果类型不是带有R[X]
的Applicative[R]
,而是带有R
的某些Monoid[R]
,则您必须为隐式方法Monoid[R]
导入Applicative.monoidApplicative
实例:import scalaz.std.anyVal.intInstance
List(1, 2, 3).traverseU{ identity }
// 6
注意
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
关于scala - 我应该为Scalaz的导线功能导入什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27548802/