I noticed that Stream
is deprecated in Scala 2.13
and they suggest using LazyList
.
They also say "Use LazyList (which is fully lazy) instead of Stream (which has a lazy tail only)".
What does it exactly mean ? Why did they deprecate Stream
?

- 47,285
- 6
- 56
- 98

- 41,026
- 70
- 193
- 341
-
6Basically **Stream** was only lazy on its `tail`, so the `head` was always computed. For many people this was surprising and lead to erroneous code. On the other hand **LayzList** is fully lazy. It doesn't compute the head until it is called. Note that when you compute the head of a LayzList also computes its tail and viceversa. – Luis Miguel Mejía Suárez Feb 08 '20 at 15:41
-
Got it. Thank you. – Michael Feb 08 '20 at 15:42
-
@LuisMiguelMejíaSuárez Is there an example of erroneous code it would lead to? – Mario Galic Feb 08 '20 at 17:20
-
@MarioGalic not erroneous in the sense of correctness. But erroneous in the sense of how it was behaving. – Luis Miguel Mejía Suárez Feb 08 '20 at 18:42
2 Answers
NthPortal, a contributor to LazyList
, states in Update and improve LazyList docs #7842
The key difference between
LazyList
andStream
- and its key feature - is that whether or not it is lazy is evaluated lazily. I'm not sure how best to convey that.
jwvh states in related question
Stream
elements are realized lazily except for the 1st (head) element. That was seen as a deficiency.
Scala 2.13 release notes state
immutable.LazyList
replaces immutable.Stream
. Stream
had different laziness behavior and is now deprecated. (#7558, #7000)

- 47,285
- 6
- 56
- 98
As per the blog post:
LazyList Is Preferred Over Stream
Stream is deprecated in favor of LazyList. As its name suggests, a LazyList is a linked list whose elements are lazily evaluated. An important semantic difference with Stream is that in LazyList both the head and the tail are lazy, whereas in Stream only the tail is lazy.
Also in the Stream documentation:
Deprecated (Since version 2.13.0)
Use LazyList (which is fully lazy) instead of Stream (which has a lazy tail only)

- 89
- 2
- 10