{-# LANGUAGE CPP #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} #ifdef USE_REFLEX_OPTIMIZER {-# OPTIONS_GHC -fplugin=Reflex.Optimizer #-} #endif module Reflex.NotReady.Class ( NotReady(..) ) where import Control.Monad.Reader (ReaderT) import Control.Monad.Trans import Control.Monad.Trans.Writer (WriterT) import Reflex.BehaviorWriter.Base (BehaviorWriterT) import Reflex.Class import Reflex.DynamicWriter.Base (DynamicWriterT) import Reflex.EventWriter.Base (EventWriterT) import Reflex.Host.Class import Reflex.PerformEvent.Base (PerformEventT (..)) import Reflex.PostBuild.Base (PostBuildT) import Reflex.Query.Base (QueryT) import Reflex.Requester.Base (RequesterT) import Reflex.TriggerEvent.Base (TriggerEventT) class Monad m => NotReady t m | m -> t where notReadyUntil :: Event t a -> m () default notReadyUntil :: (MonadTrans f, m ~ f m', NotReady t m') => Event t a -> m () notReadyUntil = m' () -> f m' () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m' () -> f m' ()) -> (Event t a -> m' ()) -> Event t a -> f m' () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m' () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: m () default notReady :: (MonadTrans f, m ~ f m', NotReady t m') => m () notReady = m' () -> f m' () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m' () forall t (m :: * -> *). NotReady t m => m () notReady instance NotReady t m => NotReady t (ReaderT r m) where notReadyUntil :: Event t a -> ReaderT r m () notReadyUntil = m () -> ReaderT r m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> ReaderT r m ()) -> (Event t a -> m ()) -> Event t a -> ReaderT r m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: ReaderT r m () notReady = m () -> ReaderT r m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m () forall t (m :: * -> *). NotReady t m => m () notReady instance (NotReady t m, Monoid w) => NotReady t (WriterT w m) where notReadyUntil :: Event t a -> WriterT w m () notReadyUntil = m () -> WriterT w m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> WriterT w m ()) -> (Event t a -> m ()) -> Event t a -> WriterT w m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: WriterT w m () notReady = m () -> WriterT w m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m () forall t (m :: * -> *). NotReady t m => m () notReady instance NotReady t m => NotReady t (PostBuildT t m) where notReadyUntil :: Event t a -> PostBuildT t m () notReadyUntil = m () -> PostBuildT t m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> PostBuildT t m ()) -> (Event t a -> m ()) -> Event t a -> PostBuildT t m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: PostBuildT t m () notReady = m () -> PostBuildT t m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m () forall t (m :: * -> *). NotReady t m => m () notReady instance NotReady t m => NotReady t (EventWriterT t w m) where notReadyUntil :: Event t a -> EventWriterT t w m () notReadyUntil = m () -> EventWriterT t w m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> EventWriterT t w m ()) -> (Event t a -> m ()) -> Event t a -> EventWriterT t w m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: EventWriterT t w m () notReady = m () -> EventWriterT t w m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m () forall t (m :: * -> *). NotReady t m => m () notReady instance NotReady t m => NotReady t (DynamicWriterT t w m) where notReadyUntil :: Event t a -> DynamicWriterT t w m () notReadyUntil = m () -> DynamicWriterT t w m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> DynamicWriterT t w m ()) -> (Event t a -> m ()) -> Event t a -> DynamicWriterT t w m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: DynamicWriterT t w m () notReady = m () -> DynamicWriterT t w m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m () forall t (m :: * -> *). NotReady t m => m () notReady instance NotReady t m => NotReady t (BehaviorWriterT t w m) where notReadyUntil :: Event t a -> BehaviorWriterT t w m () notReadyUntil = m () -> BehaviorWriterT t w m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> BehaviorWriterT t w m ()) -> (Event t a -> m ()) -> Event t a -> BehaviorWriterT t w m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: BehaviorWriterT t w m () notReady = m () -> BehaviorWriterT t w m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m () forall t (m :: * -> *). NotReady t m => m () notReady instance NotReady t m => NotReady t (QueryT t q m) where notReadyUntil :: Event t a -> QueryT t q m () notReadyUntil = m () -> QueryT t q m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> QueryT t q m ()) -> (Event t a -> m ()) -> Event t a -> QueryT t q m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: QueryT t q m () notReady = m () -> QueryT t q m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m () forall t (m :: * -> *). NotReady t m => m () notReady instance (ReflexHost t, NotReady t (HostFrame t)) => NotReady t (PerformEventT t m) where notReadyUntil :: Event t a -> PerformEventT t m () notReadyUntil = RequesterT t (HostFrame t) Identity (HostFrame t) () -> PerformEventT t m () forall k t (m :: k) a. RequesterT t (HostFrame t) Identity (HostFrame t) a -> PerformEventT t m a PerformEventT (RequesterT t (HostFrame t) Identity (HostFrame t) () -> PerformEventT t m ()) -> (Event t a -> RequesterT t (HostFrame t) Identity (HostFrame t) ()) -> Event t a -> PerformEventT t m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> RequesterT t (HostFrame t) Identity (HostFrame t) () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: PerformEventT t m () notReady = RequesterT t (HostFrame t) Identity (HostFrame t) () -> PerformEventT t m () forall k t (m :: k) a. RequesterT t (HostFrame t) Identity (HostFrame t) a -> PerformEventT t m a PerformEventT RequesterT t (HostFrame t) Identity (HostFrame t) () forall t (m :: * -> *). NotReady t m => m () notReady instance NotReady t m => NotReady t (RequesterT t request response m) where notReadyUntil :: Event t a -> RequesterT t request response m () notReadyUntil = m () -> RequesterT t request response m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> RequesterT t request response m ()) -> (Event t a -> m ()) -> Event t a -> RequesterT t request response m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: RequesterT t request response m () notReady = m () -> RequesterT t request response m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m () forall t (m :: * -> *). NotReady t m => m () notReady instance NotReady t m => NotReady t (TriggerEventT t m) where notReadyUntil :: Event t a -> TriggerEventT t m () notReadyUntil = m () -> TriggerEventT t m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> TriggerEventT t m ()) -> (Event t a -> m ()) -> Event t a -> TriggerEventT t m () forall b c a. (b -> c) -> (a -> b) -> a -> c . Event t a -> m () forall t (m :: * -> *) a. NotReady t m => Event t a -> m () notReadyUntil notReady :: TriggerEventT t m () notReady = m () -> TriggerEventT t m () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m () forall t (m :: * -> *). NotReady t m => m () notReady