module Helic.GtkMain where
import Conc (withAsync_)
import Exon (exon)
import qualified Log
import qualified Helic.Effect.Gtk as Gtk
import Helic.Effect.Gtk (Gtk)
import qualified Helic.Effect.GtkMain as GtkMain
import Helic.Effect.GtkMain (GtkMain)
gtkMain ::
Members [Scoped_ (Gtk s), GtkMain s, Resource] r =>
Sem r () ->
Sem r ()
gtkMain :: forall s (r :: EffectRow).
Members '[Scoped_ (Gtk s), GtkMain s, Resource] r =>
Sem r () -> Sem r ()
gtkMain Sem r ()
onInit =
forall (effect :: (* -> *) -> * -> *) (r :: EffectRow).
Member (Scoped_ effect) r =>
InterpreterFor effect r
scoped_ do
forall s (r :: EffectRow). Member (GtkMain s) r => s -> Sem r ()
GtkMain.running forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall s (r :: EffectRow). Member (Gtk s) r => Sem r s
Gtk.resource
forall (e :: (* -> *) -> * -> *) (r :: EffectRow) a.
Sem r a -> Sem (e : r) a
raise Sem r ()
onInit
forall s (r :: EffectRow). Member (Gtk s) r => Sem r ()
Gtk.main
loopGtkMain ::
Members [Scoped_ (Gtk s) !! Text, GtkMain s, Resource, Log] r =>
Sem r () ->
Sem r ()
loopGtkMain :: forall s (r :: EffectRow).
Members '[Scoped_ (Gtk s) !! Text, GtkMain s, Resource, Log] r =>
Sem r () -> Sem r ()
loopGtkMain Sem r ()
onInit =
forall (f :: * -> *) a b. Applicative f => f a -> f b
forever do
forall s (r :: EffectRow) a.
Member (GtkMain s) r =>
Sem r a -> Sem r a
GtkMain.run do
forall s (r :: EffectRow).
Members '[Scoped_ (Gtk s), GtkMain s, Resource] r =>
Sem r () -> Sem r ()
gtkMain @_ @(Scoped_ (Gtk _) : _) (forall (e :: (* -> *) -> * -> *) (r :: EffectRow) a.
Sem r a -> Sem (e : r) a
raise Sem r ()
onInit) forall err (eff :: (* -> *) -> * -> *) (r :: EffectRow) a.
Member (Resumable err eff) r =>
Sem (eff : r) a -> (err -> Sem r a) -> Sem r a
!! \ Text
e ->
forall (r :: EffectRow).
(HasCallStack, Member Log r) =>
Text -> Sem r ()
Log.error [exon|Gtk main loop failed: #{e}|]
gtkResource ::
Members [GtkMain s, Log, Stop Text] r =>
Sem r s
gtkResource :: forall s (r :: EffectRow).
Members '[GtkMain s, Log, Stop Text] r =>
Sem r s
gtkResource =
forall s (r :: EffectRow).
Member (GtkMain s) r =>
Sem r s -> Sem r s
GtkMain.access do
forall (r :: EffectRow).
(HasCallStack, Member Log r) =>
Text -> Sem r ()
Log.info Text
"Gtk main loop inactive, requesting restart"
forall s (r :: EffectRow).
Member (GtkMain s) r =>
Sem r s -> Sem r s
GtkMain.request (forall e (r :: EffectRow) a. Member (Stop e) r => e -> Sem r a
stop Text
"Gtk main loop didn't start") forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (r :: EffectRow).
(HasCallStack, Member Log r) =>
Text -> Sem r ()
Log.info Text
"Gtk main loop started"
gtkMainLoop ::
Members [Scoped_ (Gtk s) !! Text, GtkMain s, Log, Race, Resource, Async] r =>
Sem r () ->
Sem r a ->
Sem r a
gtkMainLoop :: forall s (r :: EffectRow) a.
Members
'[Scoped_ (Gtk s) !! Text, GtkMain s, Log, Race, Resource, Async]
r =>
Sem r () -> Sem r a -> Sem r a
gtkMainLoop Sem r ()
onInit =
forall (r :: EffectRow) b a.
Members '[Resource, Race, Async] r =>
Sem r b -> Sem r a -> Sem r a
withAsync_ (forall s (r :: EffectRow).
Members '[Scoped_ (Gtk s) !! Text, GtkMain s, Resource, Log] r =>
Sem r () -> Sem r ()
loopGtkMain Sem r ()
onInit)