From 151785335d5f5a318a0f1b0816fa67918ce93ba4 Mon Sep 17 00:00:00 2001 From: Olivier Nicole Date: Mon, 20 Nov 2023 14:14:47 +0100 Subject: [PATCH] Add Lwd.map_and_set --- lib/lwd/lwd.ml | 2 ++ lib/lwd/lwd.mli | 3 +++ 2 files changed, 5 insertions(+) diff --git a/lib/lwd/lwd.ml b/lib/lwd/lwd.ml index 57925d1..22e503c 100644 --- a/lib/lwd/lwd.ml +++ b/lib/lwd/lwd.ml @@ -308,6 +308,8 @@ let peek = function | Operator ({desc = Var v; _}) -> v.binding | _ -> assert false +let map_and_set f v = set v (f (peek v)) + (* Primitives *) type 'a prim = 'a t let prim ~acquire ~release = diff --git a/lib/lwd/lwd.mli b/lib/lwd/lwd.mli index 386dde3..77ff1d3 100644 --- a/lib/lwd/lwd.mli +++ b/lib/lwd/lwd.mli @@ -67,6 +67,9 @@ val peek : 'a var -> 'a (** Observe the current value of the variable, without any dependency tracking. *) +val map_and_set : ('a -> 'a) -> 'a var -> unit +(** Modify a variable based on its currently observed value. *) + type +'a prim (** A primitive document. It can correspond, for example, to a primitive UI element.