diff --git a/core/shared/src/main/scala/fs2/util/Monad.scala b/core/shared/src/main/scala/fs2/util/Monad.scala index bd32bfd34d..de010151ad 100644 --- a/core/shared/src/main/scala/fs2/util/Monad.scala +++ b/core/shared/src/main/scala/fs2/util/Monad.scala @@ -10,7 +10,7 @@ trait Monad[F[_]] extends Applicative[F] { def flatMap[A,B](a: F[A])(f: A => F[B]): F[B] def map[A,B](a: F[A])(f: A => B): F[B] = flatMap(a)(f andThen pure) - def ap[A,B](fa: F[A])(f: F[A => B]): F[B] = flatMap(f)(map(fa)) + def ap[A,B](fa: F[A])(f: F[A => B]): F[B] = flatMap(fa)(a => map(f)(_(a))) } object Monad { diff --git a/core/shared/src/test/scala/fs2/util/TraverseSpec.scala b/core/shared/src/test/scala/fs2/util/TraverseSpec.scala new file mode 100644 index 0000000000..2a1ceca88a --- /dev/null +++ b/core/shared/src/test/scala/fs2/util/TraverseSpec.scala @@ -0,0 +1,14 @@ +package fs2 +package util + +class TraverseSpec extends Fs2Spec { + + "Traverse" - { + "evaluate effects in left-to-right order" in { + var acc = collection.mutable.ListBuffer[Int]() + val result = Traverse[List].traverse((1 to 5).toList)(n => Task.delay(acc += n)) + result.unsafeRunSync() + acc.toList shouldBe List(1, 2, 3, 4, 5) + } + } +}