無限に続く再帰処理を扱うための遅延評価の仕組みで、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)