For collection traverseU func
you will need to import the syntax for traverseU
(implicit method for TraverseOps
), the implicit instance of Traverse[C]
(for collection
type C
) and Applicative[R]
(for func
the result type is R[X]
).
For instance:
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))
In case the result type func
not R[X]
with Applicative[R]
, but some R
with Monoid[R]
you will have to import a Monoid[R]
instance for the implicit Applicative.monoidApplicative
method:
import scalaz.std.anyVal.intInstance List(1, 2, 3).traverseU{ identity }
Note that listInstance
also MonadPlus[List]
, Zip[List]
, Unzip[List]
, etc.
So, if you want to get only Traverse[List]
for some good reason, you have to do it like this:
implicit val traverseList: scalaz.Traverse[List] = scalaz.std.list.listInstance implicit val applicativeOption: scalaz.Applicative[Option] = scalaz.std.option.optionInstance
senia source share