From b75a27702f72c60337c64ad20bd73b00b2c88396 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sun, 27 Oct 2019 19:26:47 +0100 Subject: Add withShared --- src/Gtk/Shares.dcl | 2 ++ src/Gtk/Shares.icl | 8 ++++++++ 2 files changed, 10 insertions(+) (limited to 'src/Gtk') diff --git a/src/Gtk/Shares.dcl b/src/Gtk/Shares.dcl index 3a3891b..81dccdf 100644 --- a/src/Gtk/Shares.dcl +++ b/src/Gtk/Shares.dcl @@ -15,3 +15,5 @@ setShared :: !(Shared a) !a -> GtkM a | shared a updateShared :: !(a -> a) !(Shared a) -> GtkM a | shared a singletonShared :: !String !(GtkM a) -> GtkM a | shared a + +withShared :: a !((Shared a) -> GtkM b) -> GtkM b | shared a diff --git a/src/Gtk/Shares.icl b/src/Gtk/Shares.icl index 4ff107f..d02b1b0 100644 --- a/src/Gtk/Shares.icl +++ b/src/Gtk/Shares.icl @@ -45,3 +45,11 @@ singletonShared name setup = setup >>= \val -> setShared shr (Just val) >>| pure val + +withShared :: a !((Shared a) -> GtkM b) -> GtkM b | shared a +withShared default f = + updateShared inc temp_share_id >>= \id -> + let shared_value = share ("withShared"+++toString id) default in + f shared_value +where + temp_share_id = share "withShared_temp_share_id" 0 -- cgit v1.2.3