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