diff options
author | Camil Staps | 2019-10-23 21:35:18 +0200 |
---|---|---|
committer | Camil Staps | 2019-10-23 21:35:18 +0200 |
commit | 94130c3ff512b457f349a29633d0fafc3a6e93b6 (patch) | |
tree | e5b9699889bc329758a5c986142c6bb26ca26743 /src/Gtk | |
parent | Add setRangeEditable for GtkSheet (diff) |
Add singletonShared convenience function
Diffstat (limited to 'src/Gtk')
-rw-r--r-- | src/Gtk/Shares.dcl | 2 | ||||
-rw-r--r-- | src/Gtk/Shares.icl | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/Gtk/Shares.dcl b/src/Gtk/Shares.dcl index e05407c..3a3891b 100644 --- a/src/Gtk/Shares.dcl +++ b/src/Gtk/Shares.dcl @@ -13,3 +13,5 @@ share :: !ShareId a -> Shared a | shared a getShared :: !(Shared a) -> GtkM a | shared a 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 diff --git a/src/Gtk/Shares.icl b/src/Gtk/Shares.icl index 13a8727..4ff107f 100644 --- a/src/Gtk/Shares.icl +++ b/src/Gtk/Shares.icl @@ -34,3 +34,14 @@ setShared (id,_) v = updateShared :: !(a -> a) !(Shared a) -> GtkM a | shared a updateShared f shared = getShared shared >>= setShared shared o f + +singletonShared :: !String !(GtkM a) -> GtkM a | shared a +singletonShared name setup = + let shr = share name Nothing in + getShared shr >>= \val -> case val of + Just val -> + pure val + Nothing -> + setup >>= \val -> + setShared shr (Just val) >>| + pure val |