Согласно кошкам State
Монада Документация
Метод flatMap
в State[S, A]
позволяет использовать результат одного State
в последующем State
Это означает, что мы можем иметь переходы состояний, хорошо выстроенные в линию для для понимания примерно так
val createRobot: State[Seed, Robot] =
for {
id <- nextLong
sentient <- nextBoolean
isCatherine <- nextBoolean
name = if (isCatherine) "Catherine" else "Carlos"
isReplicant <- nextBoolean
model = if (isReplicant) "replicant" else "borg"
} yield Robot(id, sentient, name, model)
В общем, цель flatMap
это цепочка монадических вычислений, поэтому, какую бы монаду мы ни имели, мы можем вставить ее для понимания.