The following code blows the stack:

```
val fibs: Stream[BigInt] = BigInt(0) #:: BigInt(1) #:: fibs.zip(fibs.tail).map { n => n._1 + n._2 }.takeWhile(x => x < 4000000).filter(x => x % 2 == 0)

scala> fibs foreach println
0
1
java.lang.StackOverflowError

```

If I take out the filter and apply it to the stream in another expression as follows, it is fine:

```
scala> val fibs: Stream[BigInt] = BigInt(0) #:: BigInt(1) #:: fibs.zip(fibs.tail).map { n => n._1 + n._2 }.takeWhile(x => x < 4000000)
fibs: Stream[scala.math.BigInt] = Stream(0, ?)

scala> fibs filter ( x => x % 2 == 0)
res8: scala.collection.immutable.Stream[scala.math.BigInt] = Stream(0, ?)

scala> fibs filter ( x => x % 2 == 0) foreach println
0
2
8
34
144
610
2584
10946
46368
196418
832040
3524578

```

Why does it blow the stack with the first approach but not the second?