From 8bb71651ce0bc818fb70ad14725545df2a94f22e Mon Sep 17 00:00:00 2001 From: mn98 Date: Sun, 20 Nov 2022 18:01:00 +0000 Subject: [PATCH] A combinator to flatten a modification of a `Ref`. --- kernel/shared/src/main/scala/cats/effect/kernel/Ref.scala | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/shared/src/main/scala/cats/effect/kernel/Ref.scala b/kernel/shared/src/main/scala/cats/effect/kernel/Ref.scala index 2b820b5f9c..8f2f9211f1 100644 --- a/kernel/shared/src/main/scala/cats/effect/kernel/Ref.scala +++ b/kernel/shared/src/main/scala/cats/effect/kernel/Ref.scala @@ -104,6 +104,11 @@ abstract class Ref[F[_], A] extends RefSource[F, A] with RefSink[F, A] { */ def modify[B](f: A => (A, B)): F[B] + /** + * Like `modify` but the evaluation of the return value is wrapped in the effect type `F`. + */ + def flatModify[B](f: A => (A, F[B]))(implicit F: FlatMap[F]): F[B] = F.flatten(modify(f)) + /** * Update the value of this ref with a state computation. *