Represents a type MA that has been destructured into as a type constructor M[_]
applied to type A, along with a corresponding type class instance TC[M].
The implicit conversions in the companion object provide a means to obtain type class
instances for partially applied type constructors, in lieu of direct compiler support
as described in SI-2712.
// Directly depending on Applicative[G]def traverse[G[_], B](f: A => G[B])(implicit G: Applicative[G]): G[F[B]] =
G.traverse(self)(f)
// Indirect lookup of the Applicative instance// Requires the -Ydep-method-types flag to scalac with scala 2.9.x (not required with 2.10)def traverseI[GB](f: A => GB)(implicit G: Unapply[Applicative, GB]): G.M[F[G.A]] /*G[F[B]*/ = {
G.TC.traverse(self)(a => G(f(a)))
}
// Deforested version of traverseIdef traverseI2[GB](f: A => GB)(implicit G: Unapply[Applicative, GB]): G.M[F[G.A]] /*G[F[B]*/ = {
G.TC.traverse(self)(G.leibniz.onF(f))
}
// Old usagedef stateTraverse1 {
import scalaz._, Scalaz._
import State.{State, stateMonad}
val ls = List(1, 2, 3)
val traverseOpt: Option[List[Int]] = ls.traverse(a =>Some(a))
val traverseState: State[Int, List[Int]] = ls.traverse[({type ᅫᄏ[ᅫᄆ]=State[Int, ᅫᄆ]})#ᅫᄏ, Int](a => State((x: Int) => (x + 1, a)))
}
// New usagedef stateTraverse2 {
import scalaz._, Scalaz._
val ls = List(1, 2, 3)
val traverseOpt: Option[List[Int]] = ls.traverseI(a => some(a))
val traverseState = ls.traverseI(a => State((x: Int) => (x + 1, a)))
}
Represents a type
MA
that has been destructured into as a type constructorM[_]
applied to typeA
, along with a corresponding type class instanceTC[M]
.The implicit conversions in the companion object provide a means to obtain type class instances for partially applied type constructors, in lieu of direct compiler support as described in SI-2712.
Credits to Miles Sabin.