From f48255e9a09d49fb9326fc6a08a4691e2cb7b171 Mon Sep 17 00:00:00 2001 From: Richard Wallace Date: Fri, 22 Apr 2016 12:19:55 -0700 Subject: [PATCH] change EphemeralStream.foldLeft to use a tail recursive loop (cherry picked from commit d4be5303912e6416094c75584644e2b6e920d298) --- core/src/main/scala/scalaz/EphemeralStream.scala | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/core/src/main/scala/scalaz/EphemeralStream.scala b/core/src/main/scala/scalaz/EphemeralStream.scala index 0b2f2baadf..052a91afcd 100644 --- a/core/src/main/scala/scalaz/EphemeralStream.scala +++ b/core/src/main/scala/scalaz/EphemeralStream.scala @@ -36,13 +36,11 @@ sealed abstract class EphemeralStream[A] { if (isEmpty) z else f(head())(tail().foldRight(z)(f)) def foldLeft[B](z: => B)(f: (=> B) => (=> A) => B): B = { - var t = this - var acc = z - while (!t.isEmpty) { - acc = f(acc)(t.head()) - t = t.tail() - } - acc + @annotation.tailrec + def loop(t: EphemeralStream[A], acc: B): B = + if (t.isEmpty) acc + else loop(t.tail(), f(acc)(t.head())) + loop(this, z) } def filter(p: A => Boolean): EphemeralStream[A] = {