scala - How to use sequence from scalaz to transform T[G[A]] to G[T[A]] -



scala - How to use sequence from scalaz to transform T[G[A]] to G[T[A]] -

i have code transform list[future[int]] future[list[int]] using scalaz sequence.

import scalaz.concurrent.future val t = list(future.now(1), future.now(2), future.now(3)) //list[future[int]] val r = t.sequence //future[list[int]]

because using future scalaz, may have implicit resolution magic me, wonder if type class custom class not predefined 1 future, how can define implicit resolution accomplish same result

case class foo(x: int) val t = list(foo(1), foo(2), foo(3)) //list[foo[int]] val r = t.sequence //foo[list[int]]

many in advance

you need create applicative[foo] (or monad[foo]) in implicit scope.

what asking won't work, since foo not universally quantified (so expected type r doesn't create sense foo[list[int]], since foo doesn't take type parameter.

lets define foo differently:

case class foo[a](a: a) object foo { implicit val fooapplicative = new applicative[foo] { override def point[a](a: => a) = foo(a) override def ap[a,b](fa: => foo[a])(f: => foo[a=>b]): foo[b] = foo(f.a(fa.a)) } }

now if create sure implicit in scope, can sequence:

scala> val t = list(foo(1), foo(2), foo(3)) t: list[foo[int]] = list(foo(1), foo(2), foo(3)) scala> t.sequence res0: foo[list[int]] = foo(list(1, 2, 3))

scala scalaz scalaz7

Comments

Popular posts from this blog

java Multi query from Mysql using netbeans -

c# - DotNetZip fails with "stream does not support seek operations" -

c++ - StartServiceCtrlDispatcher don't can access 1063 error -