scalazではfoldの逆操作としてunfoldが用意されている。
この関数は初期値と B => Option[(A, B)]の関数を取り、そのタプルのB成分を再び関数に適用していくことで、Aから成るStreamを構成する。
Githubのscalaz/core/src/main/scala/scalaz/StreamT.scalaによれば、
このような定義がなされている。
失敗する可能性のある関数を繰り返し、失敗するまで、もしくはそれまでの一定回数の試行をStreamで得ることができる。
0から100までの数字nを受け取り1を加えたSome(n+1)を返すが、入力値がそれ以外の場合はNoneを返す関数failableを考える。
さて、初期値が0だとして、失敗するまで次値を計算し続けてみる:
このように、漸化式チックなものを利用するときに使える。