{ mvar =>
new DefaultMonadState[F, S] {
val monad = implicitly[Monad[F]]
def get: F[GroupState.ByGroup] =
for {
value <- mvar.take
_ <- mvar.put(value)
} yield value
def set(s: S): F[Unit] =
for {
_ <- mvar.take
_ <- mvar.put(s)
} yield ()
override def modify(f: S => S): F[Unit] =
for {
value <- mvar.take
_ <- mvar.put(f(value))
} yield ()
}
}
У тебя стейт иммутабельный? Тогда на рефе сделай
И если уж ты в мвар ввязался, у тебя эффект конкаррент? Тогда ты мвар опасно используешь, можешь остаться с пустым мваром при канселяции файбера
плохая идея
Обсуждают сегодня