а есть какой-нибудь хороший юзкейс на примете?
так
Да, Ref.modify делать если функция A => F[B], а не A => B.
а, тогда да. к слову, в зио реф умеет это из коробки (наверняка тоже стм под капотом используется)
Как-то я написал что-то типа def updateState(f: St => F[St]): F[St] = for { tup <- ref.access (oldSt, update) = tup candidate <- f(oldSt) isSuccessful <- update(candidate) newSt <- if (isSuccessful) candidate.pure else updateState(f) } yield newSt } Проблема тут в том, что f должна быть идемпотентна. Возможно еще есть какие-то неочевидные проблемы.
юзкейсы одни и те же
И как предлагаешь делать ?
А там нет универсального решения. Зависит от того какое поведение ты хочешь получить в конкретном случае. Поэтому про STM и спросил.
реф не умел это в зио, последний раз, когда я проверял
я конечно же имел ввиду ZRef
Обсуждают сегодня