無限に続く再帰処理を扱うための遅延評価の仕組みで、Stream型を使うことで再起的な処理を表現することができる
scalaではStream.evalでStream型を作成できる
Stream.repeatで再帰処理をさせることができ、compile.toListでStreamを評価することができる
具体的にはStream.take(n: int)などを使って必要な分だけストリームから要素を取り出して、compile.toListで評価してList型にするといった使い方をできる
val infiniteDieCasts = Stream.eval(castTheDie()).repeat
infiniteDieCasts.take(3).compile.toList.map(_.sum)