iterateForeverM is almost exclusively useful for effect types.
iterateForeverM is almost exclusively useful for effect types. For instance, A may be some state, we may take the current state, run some effect to get a new state and repeat.
Example:
Example:
scala> import cats.implicits._ scala> val a: Int = 10 scala> a.tailRecM[Option,String](i => if (i == 20) Some(Right("done")) else Some(Left(i+1))) res0: Option[String] = Some(done)