Trying to learn to write applications with Gtk2Hs I\'m getting difficulties bridging the gap between the event driven Gtk2HS and the persistent state of my model. So to simp
There's basically two approaches:
Use a pointer of some kind. This is your IORef
or MVar
approach. You can hide this behind a MonadState
-like interface if you like:
newtype GtkT s m a = GtkT { unGtkT :: ReaderT (IORef s) m a } deriving (Functor, Applicative, Monad, MonadIO)
runGtkT = runReaderT . unGtkT
instance MonadIO m => MonadState s (GtkT s m) where
get = GtkT (ask >>= liftIO . readIORef)
put s = GtkT (ask >>= liftIO . flip writeIORef s)
Pull an "inversion of control" style trick. Write a callback that prints a number, then replaces itself with a new callback that prints a higher number.
If you try to use State
or StateT
directly, you're gonna have a bad time.