Skip to content

Commit 4a2bf18

Browse files
committed
Change signalAddHandler to return an AddHandler without IO
Since an `AddHandler` already allows doing `IO` “inside” it, the outer `IO` is not necessary.
1 parent 6b2ae3a commit 4a2bf18

File tree

2 files changed

+9
-10
lines changed

2 files changed

+9
-10
lines changed

reactive-banana-gi-gtk/reactive-banana-gi-gtk.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ library
1717
build-depends: base >= 4.7 && < 5,
1818
reactive-banana < 1.3
1919
, gi-gtk >= 3.0.1.1 && < 5.0
20-
, haskell-gi-base >= 0.20 && < 0.24
20+
, haskell-gi-base >= 0.22 && < 0.24
2121
, transformers >= 0.5.2.0 && < 0.6
2222
, text >= 1.2.2.1 && < 1.3
2323
default-language: Haskell2010

reactive-banana-gi-gtk/src/Reactive/Banana/GI/Gtk.hs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import Reactive.Banana.Frameworks
2424

2525
import Data.Typeable
2626
import Control.Exception
27-
import Control.Monad.IO.Class
2827
import Data.Maybe (fromJust)
2928
import qualified Data.Text as T
3029
import Data.Text (Text)
@@ -48,6 +47,7 @@ import Data.GI.Base.Overloading
4847
import Data.GI.Base.Signals
4948
( SignalInfo(..)
5049
, GObjectNotifySignalInfo(..)
50+
, disconnectSignalHandler
5151
)
5252
import GI.Gtk
5353
( GObject
@@ -91,11 +91,11 @@ signalAddHandler
9191
-> SignalProxy self info
9292
-> ((a -> IO b) -> HaskellCallbackType info)
9393
-> b
94-
-> IO (AddHandler a)
95-
signalAddHandler self signal f b = do
96-
(addHandler, fire) <- newAddHandler
97-
on self signal (f $ \x -> fire x >> return b)
98-
return addHandler
94+
-> AddHandler a
95+
signalAddHandler self signal f b =
96+
AddHandler $ \fire ->
97+
on self signal (f $ \x -> fire x >> return b) >>=
98+
pure . disconnectSignalHandler self
9999

100100
-- | Create an 'Reactive.Banana.Event' from
101101
-- a 'Data.GI.Base.Signals.SignalProxy'. For making signalE# functions.
@@ -111,9 +111,8 @@ signalEN
111111
-> ((a -> IO b) -> HaskellCallbackType info)
112112
-> b
113113
-> MomentIO (Event a)
114-
signalEN self signal f b = do
115-
addHandler <- liftIO $ signalAddHandler self signal f b
116-
fromAddHandler addHandler
114+
signalEN self signal f b =
115+
fromAddHandler $ signalAddHandler self signal f b
117116

118117
-- | Get an 'Reactive.Banana.Event' from
119118
-- a 'Data.GI.Base.Signals.SignalProxy' that produces nothing.

0 commit comments

Comments
 (0)