-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Higher-order Functional Reactive Programming -- -- Reflex is a high-performance, deterministic, higher-order Functional -- Reactive Programming system @package reflex @version 0.0.1 module Control.Monad.Ref class Monad m => MonadRef m where type family Ref m :: * -> * newRef :: MonadRef m => a -> m (Ref m a) readRef :: MonadRef m => Ref m a -> m a writeRef :: MonadRef m => Ref m a -> a -> m () atomicModifyRef :: MonadRef m => Ref m a -> (a -> (a, b)) -> m b cacheM :: (MonadRef m, MonadRef m', Ref m ~ Ref m') => m' a -> m (m' a, m ()) cacheMWithTry :: (MonadRef m, MonadRef m', Ref m ~ Ref m') => m' a -> m (m' a, m (Maybe a), m ()) -- | Not thread-safe or reentrant memoM :: (MonadRef m, MonadRef m', Ref m ~ Ref m') => m' a -> m (m' a) replaceRef :: MonadRef m => Ref m a -> a -> m a modifyRef :: MonadRef m => Ref m a -> (a -> a) -> m () instance Control.Monad.Ref.MonadRef GHC.Types.IO instance (GHC.Base.Monoid w, Control.Monad.Ref.MonadRef m) => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Reader.ReaderT r m) module Control.Monad.TypedId class (Monad m, GCompare (TypedId m)) => MonadTypedId m where type family TypedId m :: * -> * getTypedId :: MonadTypedId m => m (TypedId m a) instance GHC.Show.Show (Control.Monad.TypedId.TypedId_IO a) instance Control.Monad.TypedId.MonadTypedId GHC.Types.IO instance Data.GADT.Compare.GCompare Control.Monad.TypedId.TypedId_IO instance Data.GADT.Compare.GEq Control.Monad.TypedId.TypedId_IO instance Control.Monad.TypedId.MonadTypedId m => Control.Monad.TypedId.MonadTypedId (Control.Monad.Trans.State.Lazy.StateT s m) instance Control.Monad.TypedId.MonadTypedId m => Control.Monad.TypedId.MonadTypedId (Control.Monad.Trans.Reader.ReaderT r m) module Data.Functor.Misc data WrapArg :: (* -> *) -> (* -> *) -> * -> * WrapArg :: f a -> WrapArg g f (g a) data Const2 :: * -> * -> * -> * Const2 :: k -> Const2 k v v sequenceDmap :: (Monad m, GCompare f) => DMap (WrapArg m f) -> m (DMap f) combineDMapsWithKey :: GCompare f => (forall a. f a -> These (g a) (h a) -> i a) -> DMap (WrapArg g f) -> DMap (WrapArg h f) -> DMap (WrapArg i f) wrapDMap :: (forall a. a -> f a) -> DMap k -> DMap (WrapArg f k) rewrapDMap :: (forall a. f a -> g a) -> DMap (WrapArg f k) -> DMap (WrapArg g k) unwrapDMap :: (forall a. f a -> a) -> DMap (WrapArg f k) -> DMap k mapToDMap :: Map k v -> DMap (Const2 k v) mapWithFunctorToDMap :: Map k (f v) -> DMap (WrapArg f (Const2 k v)) dmapToMap :: DMap (Const2 k v) -> Map k v instance Data.GADT.Compare.GEq f => Data.GADT.Compare.GEq (Data.Functor.Misc.WrapArg g f) instance Data.GADT.Compare.GCompare f => Data.GADT.Compare.GCompare (Data.Functor.Misc.WrapArg g f) instance GHC.Classes.Eq k => Data.GADT.Compare.GEq (Data.Functor.Misc.Const2 k v) instance GHC.Classes.Ord k => Data.GADT.Compare.GCompare (Data.Functor.Misc.Const2 k v) module Reflex.Class class (MonadHold t (PushM t), MonadSample t (PullM t), Functor (Event t), Functor (Behavior t)) => Reflex t where data family Behavior t :: * -> * data family Event t :: * -> * type family PushM t :: * -> * type family PullM t :: * -> * -- | An Event with no occurrences never :: Reflex t => Event t a -- | Create a Behavior that always has the given value constant :: Reflex t => a -> Behavior t a -- | Create an Event from another Event; the provided function can sample -- Behaviors and hold Events, and use the results to produce a occurring -- (Just) or non-occurring (Nothing) result push :: Reflex t => (a -> PushM t (Maybe b)) -> Event t a -> Event t b -- | Create a Behavior by reading from other Behaviors; the result will be -- recomputed whenever any of the read Behaviors changes pull :: Reflex t => PullM t a -> Behavior t a -- | Merge a collection of events; the resulting Event will only occur if -- at least one input event is occuring, and will contain all of the -- input keys that are occurring simultaneously merge :: (Reflex t, GCompare k) => DMap (WrapArg (Event t) k) -> Event t (DMap k) -- | Efficiently fan-out an event to many destinations. This function -- should be partially applied, and then the result applied repeatedly to -- create child events fan :: (Reflex t, GCompare k) => Event t (DMap k) -> EventSelector t k -- | Create an Event that will occur whenever the currently-selected input -- Event occurs switch :: Reflex t => Behavior t (Event t a) -> Event t a -- | Create an Event that will occur whenever the input event is occurring -- and its occurrence value, another Event, is also occurring coincidence :: Reflex t => Event t (Event t a) -> Event t a class Monad m => MonadSample t m | m -> t -- | Get the current value in the Behavior sample :: MonadSample t m => Behavior t a -> m a class MonadSample t m => MonadHold t m -- | Create a new Behavior whose value will initially be equal to the given -- value and will be updated whenever the given Event occurs hold :: MonadHold t m => a -> Event t a -> m (Behavior t a) newtype EventSelector t k EventSelector :: (forall a. k a -> Event t a) -> EventSelector t k [select] :: EventSelector t k -> forall a. k a -> Event t a pushAlways :: Reflex t => (a -> PushM t b) -> Event t a -> Event t b ffor :: Functor f => f a -> (a -> b) -> f b class FunctorMaybe f fmapMaybe :: FunctorMaybe f => (a -> Maybe b) -> f a -> f b fforMaybe :: FunctorMaybe f => f a -> (a -> Maybe b) -> f b ffilter :: FunctorMaybe f => (a -> Bool) -> f a -> f a zipListWithEvent :: (Reflex t, MonadHold t m, MonadFix m) => (a -> b -> c) -> [a] -> Event t b -> m (Event t c) -- | Replace the occurrence value of the Event with the value of the -- Behavior at the time of the occurrence tag :: Reflex t => Behavior t b -> Event t a -> Event t b attachWithMaybe :: Reflex t => (a -> b -> Maybe c) -> Behavior t a -> Event t b -> Event t c attachWith :: Reflex t => (a -> b -> c) -> Behavior t a -> Event t b -> Event t c attach :: Reflex t => Behavior t a -> Event t b -> Event t (a, b) onceE :: (Reflex t, MonadHold t m, MonadFix m) => Event t a -> m (Event t a) headE :: (Reflex t, MonadHold t m, MonadFix m) => Event t a -> m (Event t a) tailE :: (Reflex t, MonadHold t m, MonadFix m) => Event t a -> m (Event t a) headTailE :: (Reflex t, MonadHold t m, MonadFix m) => Event t a -> m (Event t a, Event t a) splitE :: Reflex t => Event t (a, b) -> (Event t a, Event t b) traceEvent :: (Reflex t, Show a) => String -> Event t a -> Event t a traceEventWith :: Reflex t => (a -> String) -> Event t a -> Event t a data EitherTag l r a LeftTag :: EitherTag l r l RightTag :: EitherTag l r r eitherToDSum :: Either a b -> DSum (EitherTag a b) dsumToEither :: DSum (EitherTag a b) -> Either a b dmapToThese :: DMap (EitherTag a b) -> Maybe (These a b) appendEvents :: (Reflex t, Monoid a) => Event t a -> Event t a -> Event t a sequenceThese :: Monad m => These (m a) (m b) -> m (These a b) mergeWith :: Reflex t => (a -> a -> a) -> [Event t a] -> Event t a leftmost :: Reflex t => [Event t a] -> Event t a mergeList :: Reflex t => [Event t a] -> Event t (NonEmpty a) mergeMap :: (Reflex t, Ord k) => Map k (Event t a) -> Event t (Map k a) fanMap :: (Reflex t, Ord k) => Event t (Map k a) -> EventSelector t (Const2 k a) -- | Switches to the new event whenever it receives one; the new event is -- used immediately, on the same frame that it is switched to switchPromptly :: (Reflex t, MonadHold t m) => Event t a -> Event t (Event t a) -> m (Event t a) gate :: Reflex t => Behavior t Bool -> Event t a -> Event t a instance Reflex.Class.MonadSample t m => Reflex.Class.MonadSample t (Control.Monad.Trans.Reader.ReaderT r m) instance Reflex.Class.MonadHold t m => Reflex.Class.MonadHold t (Control.Monad.Trans.Reader.ReaderT r m) instance Reflex.Class.Reflex t => GHC.Base.Functor (Reflex.Class.Behavior t) instance Reflex.Class.Reflex t => Reflex.Class.FunctorMaybe (Reflex.Class.Event t) instance Reflex.Class.Reflex t => GHC.Base.Functor (Reflex.Class.Event t) instance Data.GADT.Compare.GEq (Reflex.Class.EitherTag l r) instance Data.GADT.Compare.GCompare (Reflex.Class.EitherTag l r) instance Data.GADT.Show.GShow (Reflex.Class.EitherTag l r) instance (GHC.Show.Show l, GHC.Show.Show r) => Data.Dependent.Sum.ShowTag (Reflex.Class.EitherTag l r) instance (Data.Semigroup.Semigroup a, Reflex.Class.Reflex t) => GHC.Base.Monoid (Reflex.Class.Event t a) instance Reflex.Class.Reflex t => Data.Align.Align (Reflex.Class.Event t) module Reflex.Dynamic data Dynamic t a current :: Dynamic t a -> Behavior t a updated :: Dynamic t a -> Event t a constDyn :: Reflex t => a -> Dynamic t a holdDyn :: MonadHold t m => a -> Event t a -> m (Dynamic t a) nubDyn :: (Reflex t, Eq a) => Dynamic t a -> Dynamic t a count :: (Reflex t, MonadHold t m, MonadFix m, Num b) => Event t a -> m (Dynamic t b) toggle :: (Reflex t, MonadHold t m, MonadFix m) => Bool -> Event t a -> m (Dynamic t Bool) -- | Switches to the new event whenever it receives one. Switching occurs -- *before* occurring the inner event. switchPromptlyDyn :: Reflex t => Dynamic t (Event t a) -> Event t a tagDyn :: Reflex t => Dynamic t a -> Event t b -> Event t a attachDyn :: Reflex t => Dynamic t a -> Event t b -> Event t (a, b) attachDynWith :: Reflex t => (a -> b -> c) -> Dynamic t a -> Event t b -> Event t c attachDynWithMaybe :: Reflex t => (a -> b -> Maybe c) -> Dynamic t a -> Event t b -> Event t c mapDyn :: (Reflex t, MonadHold t m) => (a -> b) -> Dynamic t a -> m (Dynamic t b) forDyn :: (Reflex t, MonadHold t m) => Dynamic t a -> (a -> b) -> m (Dynamic t b) mapDynM :: (Reflex t, MonadHold t m) => (forall m'. MonadSample t m' => a -> m' b) -> Dynamic t a -> m (Dynamic t b) foldDyn :: (Reflex t, MonadHold t m, MonadFix m) => (a -> b -> b) -> b -> Event t a -> m (Dynamic t b) foldDynM :: (Reflex t, MonadHold t m, MonadFix m) => (a -> b -> PushM t b) -> b -> Event t a -> m (Dynamic t b) combineDyn :: (Reflex t, MonadHold t m) => (a -> b -> c) -> Dynamic t a -> Dynamic t b -> m (Dynamic t c) collectDyn :: (RebuildSortedHList (HListElems b), IsHList a, IsHList b, AllAreFunctors (Dynamic t) (HListElems b), Reflex t, MonadHold t m, HListElems a ~ FunctorList (Dynamic t) (HListElems b)) => a -> m (Dynamic t b) mconcatDyn :: (Reflex t, MonadHold t m, Monoid a) => [Dynamic t a] -> m (Dynamic t a) distributeDMapOverDyn :: (Reflex t, MonadHold t m, GCompare k) => DMap (WrapArg (Dynamic t) k) -> m (Dynamic t (DMap k)) joinDyn :: (Reflex t) => Dynamic t (Dynamic t a) -> Dynamic t a joinDynThroughMap :: (Reflex t, Ord k) => Dynamic t (Map k (Dynamic t a)) -> Dynamic t (Map k a) traceDyn :: (Reflex t, Show a) => String -> Dynamic t a -> Dynamic t a traceDynWith :: Reflex t => (a -> String) -> Dynamic t a -> Dynamic t a splitDyn :: (Reflex t, MonadHold t m) => Dynamic t (a, b) -> m (Dynamic t a, Dynamic t b) data Demux t k demux :: (Reflex t, Ord k) => Dynamic t k -> Demux t k getDemuxed :: (Reflex t, MonadHold t m, Eq k) => Demux t k -> k -> m (Dynamic t Bool) data HList (l :: [*]) HNil :: HList '[] HCons :: e -> HList l -> HList (e : l) data FHList f l FHNil :: FHList f '[] FHCons :: f e -> FHList f l -> FHList f (e : l) distributeFHListOverDyn :: (Reflex t, MonadHold t m, RebuildSortedHList l) => FHList (Dynamic t) l -> m (Dynamic t (HList l)) unsafeDynamic :: Behavior t a -> Event t a -> Dynamic t a instance (l' ~ Reflex.Dynamic.HRevApp l '[]) => Reflex.Dynamic.HBuild' l (Reflex.Dynamic.HList l') instance Reflex.Dynamic.HBuild' (a : l) r => Reflex.Dynamic.HBuild' l (a -> r) instance forall (k :: BOX) (l :: [k]). Data.GADT.Compare.GEq (Reflex.Dynamic.HListPtr l) instance forall (k :: BOX) (l :: [k]). Data.GADT.Compare.GCompare (Reflex.Dynamic.HListPtr l) instance Reflex.Dynamic.RebuildSortedHList '[] instance Reflex.Dynamic.RebuildSortedHList t => Reflex.Dynamic.RebuildSortedHList (h : t) instance forall (k :: BOX) (f :: k -> *). Reflex.Dynamic.AllAreFunctors f '[] instance forall (k :: BOX) (f :: k -> *) (h :: k) (t :: [k]). Reflex.Dynamic.AllAreFunctors f t => Reflex.Dynamic.AllAreFunctors f (h : t) instance Reflex.Dynamic.IsHList (a, b) instance Reflex.Dynamic.IsHList (a, b, c, d) instance Reflex.Dynamic.IsHList (a, b, c, d, e, f) module Reflex.Dynamic.TH -- | Quote a Dynamic expression. Within the quoted expression, you can use -- '$(unqDyn [| x |])' to refer to any expression x of type -- 'Dynamic t a'; the unquoted result will be of type a qDyn :: Q Exp -> Q Exp unqDyn :: Q Exp -> Q Exp module Reflex.Host.Class class Reflex t => ReflexHost t where type family EventTrigger t :: * -> * type family EventHandle t :: * -> * type family HostFrame t :: * -> * class (ReflexHost t, Monad m) => MonadReadEvent t m | m -> t readEvent :: MonadReadEvent t m => EventHandle t a -> m (Maybe (m a)) class (Monad m, ReflexHost t) => MonadReflexCreateTrigger t m | m -> t newEventWithTrigger :: MonadReflexCreateTrigger t m => (EventTrigger t a -> IO (IO ())) -> m (Event t a) class (Monad m, ReflexHost t, MonadReflexCreateTrigger t m) => MonadReflexHost t m | m -> t fireEventsAndRead :: MonadReflexHost t m => [DSum (EventTrigger t)] -> (forall m'. (MonadReadEvent t m') => m' a) -> m a subscribeEvent :: MonadReflexHost t m => Event t a -> m (EventHandle t a) runFrame :: MonadReflexHost t m => PushM t a -> m a runHostFrame :: MonadReflexHost t m => HostFrame t a -> m a fireEvents :: MonadReflexHost t m => [DSum (EventTrigger t)] -> m () newEventWithTriggerRef :: (MonadReflexCreateTrigger t m, MonadRef m, Ref m ~ Ref IO) => m (Event t a, Ref m (Maybe (EventTrigger t a))) instance (Reflex.Class.Reflex t, Reflex.Host.Class.MonadReflexCreateTrigger t m) => Reflex.Host.Class.MonadReflexCreateTrigger t (Control.Monad.Trans.Reader.ReaderT r m) instance (Reflex.Class.Reflex t, Reflex.Host.Class.MonadReflexHost t m) => Reflex.Host.Class.MonadReflexHost t (Control.Monad.Trans.Reader.ReaderT r m) module Reflex.Spider.Internal debugPropagate :: Bool debugInvalidateHeight :: Bool showNodeId :: a -> String data Hold a Hold :: !(IORef a) -> !(IORef [Weak Invalidator]) -> !(IORef Any) -> !(IORef Any) -> Hold a [holdValue] :: Hold a -> !(IORef a) [holdInvalidators] :: Hold a -> !(IORef [Weak Invalidator]) [holdSubscriber] :: Hold a -> !(IORef Any) [holdParent] :: Hold a -> !(IORef Any) data EventEnv EventEnv :: !(IORef [SomeAssignment]) -> !(IORef [SomeHoldInit]) -> !(IORef [SomeMaybeIORef]) -> !(IORef Int) -> !(IORef [SomeCoincidenceInfo]) -> !(IORef (IntMap [DelayedMerge])) -> EventEnv [eventEnvAssignments] :: EventEnv -> !(IORef [SomeAssignment]) [eventEnvHoldInits] :: EventEnv -> !(IORef [SomeHoldInit]) [eventEnvClears] :: EventEnv -> !(IORef [SomeMaybeIORef]) [eventEnvCurrentHeight] :: EventEnv -> !(IORef Int) [eventEnvCoincidenceInfos] :: EventEnv -> !(IORef [SomeCoincidenceInfo]) [eventEnvDelayedMerges] :: EventEnv -> !(IORef (IntMap [DelayedMerge])) runEventM :: EventM a -> EventEnv -> IO a askToAssignRef :: EventM (IORef [SomeAssignment]) askHoldInitRef :: EventM (IORef [SomeHoldInit]) getCurrentHeight :: EventM Int putCurrentHeight :: Int -> EventM () scheduleClear :: IORef (Maybe a) -> EventM () scheduleMerge :: Int -> MergeSubscribed a -> EventM () emitCoincidenceInfo :: SomeCoincidenceInfo -> EventM () hold :: a -> Event a -> EventM (Behavior a) subscribeHold :: Event a -> Hold a -> EventM () newtype BehaviorM a BehaviorM :: ReaderT (Maybe (Weak Invalidator, IORef [SomeBehaviorSubscribed])) IO a -> BehaviorM a [unBehaviorM] :: BehaviorM a -> ReaderT (Maybe (Weak Invalidator, IORef [SomeBehaviorSubscribed])) IO a data BehaviorSubscribed a BehaviorSubscribedHold :: (Hold a) -> BehaviorSubscribed a BehaviorSubscribedPull :: (PullSubscribed a) -> BehaviorSubscribed a data SomeBehaviorSubscribed SomeBehaviorSubscribed :: (BehaviorSubscribed a) -> SomeBehaviorSubscribed data PullSubscribed a PullSubscribed :: !a -> !(IORef [Weak Invalidator]) -> !Invalidator -> ![SomeBehaviorSubscribed] -> PullSubscribed a [pullSubscribedValue] :: PullSubscribed a -> !a [pullSubscribedInvalidators] :: PullSubscribed a -> !(IORef [Weak Invalidator]) [pullSubscribedOwnInvalidator] :: PullSubscribed a -> !Invalidator [pullSubscribedParents] :: PullSubscribed a -> ![SomeBehaviorSubscribed] data Pull a Pull :: !(IORef (Maybe (PullSubscribed a))) -> !(BehaviorM a) -> Pull a [pullValue] :: Pull a -> !(IORef (Maybe (PullSubscribed a))) [pullCompute] :: Pull a -> !(BehaviorM a) data Invalidator InvalidatorPull :: (Pull a) -> Invalidator InvalidatorSwitch :: (SwitchSubscribed a) -> Invalidator data RootSubscribed a RootSubscribed :: !(IORef [WeakSubscriber a]) -> !(IORef (Maybe a)) -> RootSubscribed a [rootSubscribedSubscribers] :: RootSubscribed a -> !(IORef [WeakSubscriber a]) [rootSubscribedOccurrence] :: RootSubscribed a -> !(IORef (Maybe a)) data Root a Root :: !(IORef (Maybe a)) -> !(IORef (Maybe (RootSubscribed a))) -> !(RootTrigger a -> IO (IO ())) -> Root a [rootOccurrence] :: Root a -> !(IORef (Maybe a)) [rootSubscribed] :: Root a -> !(IORef (Maybe (RootSubscribed a))) [rootInit] :: Root a -> !(RootTrigger a -> IO (IO ())) data SomeHoldInit SomeHoldInit :: (Event a) -> (Hold a) -> SomeHoldInit newtype EventM a EventM :: ReaderT EventEnv IO a -> EventM a [unEventM] :: EventM a -> ReaderT EventEnv IO a data PushSubscribed a b PushSubscribed :: !(IORef (Maybe b)) -> !(IORef Int) -> !(IORef [WeakSubscriber b]) -> !(Subscriber a) -> !(EventSubscribed a) -> PushSubscribed a b [pushSubscribedOccurrence] :: PushSubscribed a b -> !(IORef (Maybe b)) [pushSubscribedHeight] :: PushSubscribed a b -> !(IORef Int) [pushSubscribedSubscribers] :: PushSubscribed a b -> !(IORef [WeakSubscriber b]) [pushSubscribedSelf] :: PushSubscribed a b -> !(Subscriber a) [pushSubscribedParent] :: PushSubscribed a b -> !(EventSubscribed a) data Push a b Push :: !(a -> EventM (Maybe b)) -> !(Event a) -> !(IORef (Maybe (PushSubscribed a b))) -> Push a b [pushCompute] :: Push a b -> !(a -> EventM (Maybe b)) [pushParent] :: Push a b -> !(Event a) [pushSubscribed] :: Push a b -> !(IORef (Maybe (PushSubscribed a b))) data MergeSubscribed k MergeSubscribed :: !(IORef (Maybe (DMap k))) -> !(IORef (DMap k)) -> !(IORef Int) -> !(IORef [WeakSubscriber (DMap k)]) -> !Any -> !(DMap (WrapArg EventSubscribed k)) -> MergeSubscribed k [mergeSubscribedOccurrence] :: MergeSubscribed k -> !(IORef (Maybe (DMap k))) [mergeSubscribedAccum] :: MergeSubscribed k -> !(IORef (DMap k)) [mergeSubscribedHeight] :: MergeSubscribed k -> !(IORef Int) [mergeSubscribedSubscribers] :: MergeSubscribed k -> !(IORef [WeakSubscriber (DMap k)]) [mergeSubscribedSelf] :: MergeSubscribed k -> !Any [mergeSubscribedParents] :: MergeSubscribed k -> !(DMap (WrapArg EventSubscribed k)) data Merge k Merge :: !(DMap (WrapArg Event k)) -> !(IORef (Maybe (MergeSubscribed k))) -> Merge k [mergeParents] :: Merge k -> !(DMap (WrapArg Event k)) [mergeSubscribed] :: Merge k -> !(IORef (Maybe (MergeSubscribed k))) data FanSubscriberKey k a FanSubscriberKey :: k a -> FanSubscriberKey k [WeakSubscriber a] data FanSubscribed k FanSubscribed :: !(IORef (DMap (FanSubscriberKey k))) -> !(EventSubscribed (DMap k)) -> !(Subscriber (DMap k)) -> FanSubscribed k [fanSubscribedSubscribers] :: FanSubscribed k -> !(IORef (DMap (FanSubscriberKey k))) [fanSubscribedParent] :: FanSubscribed k -> !(EventSubscribed (DMap k)) [fanSubscribedSelf] :: FanSubscribed k -> !(Subscriber (DMap k)) data Fan k Fan :: !(Event (DMap k)) -> !(IORef (Maybe (FanSubscribed k))) -> Fan k [fanParent] :: Fan k -> !(Event (DMap k)) [fanSubscribed] :: Fan k -> !(IORef (Maybe (FanSubscribed k))) data SwitchSubscribed a SwitchSubscribed :: !(IORef (Maybe a)) -> !(IORef Int) -> !(IORef [WeakSubscriber a]) -> !(Subscriber a) -> !(IORef (Weak (Subscriber a))) -> !Invalidator -> !(IORef (Weak Invalidator)) -> !(IORef [SomeBehaviorSubscribed]) -> !(Behavior (Event a)) -> !(IORef (EventSubscribed a)) -> SwitchSubscribed a [switchSubscribedOccurrence] :: SwitchSubscribed a -> !(IORef (Maybe a)) [switchSubscribedHeight] :: SwitchSubscribed a -> !(IORef Int) [switchSubscribedSubscribers] :: SwitchSubscribed a -> !(IORef [WeakSubscriber a]) [switchSubscribedSelf] :: SwitchSubscribed a -> !(Subscriber a) [switchSubscribedSelfWeak] :: SwitchSubscribed a -> !(IORef (Weak (Subscriber a))) [switchSubscribedOwnInvalidator] :: SwitchSubscribed a -> !Invalidator [switchSubscribedOwnWeakInvalidator] :: SwitchSubscribed a -> !(IORef (Weak Invalidator)) [switchSubscribedBehaviorParents] :: SwitchSubscribed a -> !(IORef [SomeBehaviorSubscribed]) [switchSubscribedParent] :: SwitchSubscribed a -> !(Behavior (Event a)) [switchSubscribedCurrentParent] :: SwitchSubscribed a -> !(IORef (EventSubscribed a)) data Switch a Switch :: !(Behavior (Event a)) -> !(IORef (Maybe (SwitchSubscribed a))) -> Switch a [switchParent] :: Switch a -> !(Behavior (Event a)) [switchSubscribed] :: Switch a -> !(IORef (Maybe (SwitchSubscribed a))) data CoincidenceSubscribed a CoincidenceSubscribed :: !(IORef (Maybe a)) -> !(IORef [WeakSubscriber a]) -> !(IORef Int) -> !(Subscriber (Event a)) -> !(EventSubscribed (Event a)) -> !(IORef (Maybe (EventSubscribed a))) -> CoincidenceSubscribed a [coincidenceSubscribedOccurrence] :: CoincidenceSubscribed a -> !(IORef (Maybe a)) [coincidenceSubscribedSubscribers] :: CoincidenceSubscribed a -> !(IORef [WeakSubscriber a]) [coincidenceSubscribedHeight] :: CoincidenceSubscribed a -> !(IORef Int) [coincidenceSubscribedOuter] :: CoincidenceSubscribed a -> !(Subscriber (Event a)) [coincidenceSubscribedOuterParent] :: CoincidenceSubscribed a -> !(EventSubscribed (Event a)) [coincidenceSubscribedInnerParent] :: CoincidenceSubscribed a -> !(IORef (Maybe (EventSubscribed a))) data Coincidence a Coincidence :: !(Event (Event a)) -> !(IORef (Maybe (CoincidenceSubscribed a))) -> Coincidence a [coincidenceParent] :: Coincidence a -> !(Event (Event a)) [coincidenceSubscribed] :: Coincidence a -> !(IORef (Maybe (CoincidenceSubscribed a))) data Box a Box :: a -> Box a [unBox] :: Box a -> a data WeakSubscriber a WeakSubscriberMerge :: !(k a) -> !(Weak (Box (MergeSubscribed k))) -> WeakSubscriber a WeakSubscriberSimple :: !(Weak (Subscriber a)) -> WeakSubscriber a showWeakSubscriberType :: WeakSubscriber a -> String deRefWeakSubscriber :: WeakSubscriber a -> IO (Maybe (Subscriber a)) data Subscriber a SubscriberPush :: !(a -> EventM (Maybe b)) -> (PushSubscribed a b) -> Subscriber a SubscriberMerge :: !(k a) -> (MergeSubscribed k) -> Subscriber a SubscriberFan :: (FanSubscribed k) -> Subscriber a SubscriberHold :: !(Hold a) -> Subscriber a SubscriberSwitch :: (SwitchSubscribed a) -> Subscriber a SubscriberCoincidenceOuter :: (CoincidenceSubscribed b) -> Subscriber a SubscriberCoincidenceInner :: (CoincidenceSubscribed a) -> Subscriber a showSubscriberType :: Subscriber a -> String data Event a EventRoot :: !(Root a) -> Event a EventNever :: Event a EventPush :: !(Push b a) -> Event a EventMerge :: !(Merge k) -> Event a EventFan :: !(k a) -> !(Fan k) -> Event a EventSwitch :: !(Switch a) -> Event a EventCoincidence :: !(Coincidence a) -> Event a showEventType :: Event a -> String data EventSubscribed a EventSubscribedRoot :: !(RootSubscribed a) -> EventSubscribed a EventSubscribedNever :: EventSubscribed a EventSubscribedPush :: !(PushSubscribed b a) -> EventSubscribed a EventSubscribedMerge :: !(MergeSubscribed k) -> EventSubscribed a EventSubscribedFan :: !(k a) -> !(FanSubscribed k) -> EventSubscribed a EventSubscribedSwitch :: !(SwitchSubscribed a) -> EventSubscribed a EventSubscribedCoincidence :: !(CoincidenceSubscribed a) -> EventSubscribed a data Behavior a BehaviorHold :: !(Hold a) -> Behavior a BehaviorConst :: !a -> Behavior a BehaviorPull :: !(Pull a) -> Behavior a type ResultM = EventM unsafeNewIORef :: a -> b -> IORef b push :: (a -> EventM (Maybe b)) -> Event a -> Event b pull :: BehaviorM a -> Behavior a switch :: Behavior (Event a) -> Event a coincidence :: Event (Event a) -> Event a newRoot :: IO (Root a) propagateAndUpdateSubscribersRef :: IORef [WeakSubscriber a] -> a -> EventM () run :: [DSum RootTrigger] -> ResultM b -> IO b data SomeMaybeIORef SomeMaybeIORef :: (IORef (Maybe a)) -> SomeMaybeIORef data SomeAssignment SomeAssignment :: (Hold a) -> a -> SomeAssignment data DelayedMerge DelayedMerge :: (MergeSubscribed k) -> DelayedMerge debugFinalize :: Bool mkWeakPtrWithDebug :: a -> String -> IO (Weak a) type WeakList a = [Weak a] traverseAndCleanWeakList_ :: Monad m => (wa -> m (Maybe a)) -> [wa] -> (a -> m ()) -> m [wa] -- | Propagate everything at the current height propagate :: a -> [WeakSubscriber a] -> EventM [WeakSubscriber a] data SomeCoincidenceInfo SomeCoincidenceInfo :: (Weak (Subscriber a)) -> (Subscriber a) -> (Maybe (CoincidenceSubscribed a)) -> SomeCoincidenceInfo subscribeCoincidenceInner :: Event a -> Int -> CoincidenceSubscribed a -> EventM (Maybe a, Int, EventSubscribed a) readBehavior :: Behavior a -> IO a runBehaviorM :: BehaviorM a -> Maybe (Weak Invalidator, IORef [SomeBehaviorSubscribed]) -> IO a askInvalidator :: BehaviorM (Maybe (Weak Invalidator)) askParentsRef :: BehaviorM (Maybe (IORef [SomeBehaviorSubscribed])) readBehaviorTracked :: Behavior a -> BehaviorM a readEvent :: Event a -> ResultM (Maybe a) zeroRef :: IORef Int getEventSubscribed :: Event a -> EventM (EventSubscribed a) debugSubscribe :: Bool subscribeEventSubscribed :: EventSubscribed a -> WeakSubscriber a -> IO () getEventSubscribedOcc :: EventSubscribed a -> IO (Maybe a) eventSubscribedHeightRef :: EventSubscribed a -> IORef Int subscribe :: Event a -> WeakSubscriber a -> EventM (EventSubscribed a) getRootSubscribed :: Root a -> EventM (RootSubscribed a) getPushSubscribed :: Push a b -> EventM (PushSubscribed a b) getMergeSubscribed :: GCompare k => Merge k -> EventM (MergeSubscribed k) getFanSubscribed :: GCompare k => Fan k -> EventM (FanSubscribed k) getSwitchSubscribed :: Switch a -> EventM (SwitchSubscribed a) getCoincidenceSubscribed :: Coincidence a -> EventM (CoincidenceSubscribed a) merge :: GCompare k => DMap (WrapArg Event k) -> Event (DMap k) newtype EventSelector k EventSelector :: (forall a. k a -> Event a) -> EventSelector k [select] :: EventSelector k -> forall a. k a -> Event a fan :: GCompare k => Event (DMap k) -> EventSelector k -- | Run an event action outside of a frame runFrame :: EventM a -> IO a invalidHeight :: Int invalidateSubscriberHeight :: WeakSubscriber a -> IO () invalidateCoincidenceHeight :: CoincidenceSubscribed a -> IO () recalculateSubscriberHeight :: WeakSubscriber a -> IO () recalculateCoincidenceHeight :: CoincidenceSubscribed a -> IO () calculateMergeHeight :: MergeSubscribed k -> IO Int calculateSwitchHeight :: SwitchSubscribed a -> IO Int calculateCoincidenceHeight :: CoincidenceSubscribed a -> IO Int data SomeSwitchSubscribed SomeSwitchSubscribed :: (SwitchSubscribed a) -> SomeSwitchSubscribed debugInvalidate :: Bool invalidate :: IORef [SomeSwitchSubscribed] -> WeakList Invalidator -> IO (WeakList Invalidator) data Spider newtype RootTrigger a RootTrigger :: (IORef [WeakSubscriber a], IORef (Maybe a)) -> RootTrigger a newtype SpiderHost a SpiderHost :: IO a -> SpiderHost a [runSpiderHost] :: SpiderHost a -> IO a newtype SpiderHostFrame a SpiderHostFrame :: EventM a -> SpiderHostFrame a [runSpiderHostFrame] :: SpiderHostFrame a -> EventM a newEventWithTriggerIO :: (RootTrigger a -> IO (IO ())) -> IO (Event Spider a) instance Control.Monad.IO.Class.MonadIO Reflex.Spider.Internal.SpiderHostFrame instance Control.Monad.Fix.MonadFix Reflex.Spider.Internal.SpiderHostFrame instance GHC.Base.Monad Reflex.Spider.Internal.SpiderHostFrame instance GHC.Base.Applicative Reflex.Spider.Internal.SpiderHostFrame instance GHC.Base.Functor Reflex.Spider.Internal.SpiderHostFrame instance Control.Monad.IO.Class.MonadIO Reflex.Spider.Internal.SpiderHost instance Control.Monad.Fix.MonadFix Reflex.Spider.Internal.SpiderHost instance GHC.Base.Monad Reflex.Spider.Internal.SpiderHost instance GHC.Base.Applicative Reflex.Spider.Internal.SpiderHost instance GHC.Base.Functor Reflex.Spider.Internal.SpiderHost instance Control.Monad.IO.Class.MonadIO Reflex.Spider.Internal.EventM instance Control.Monad.Fix.MonadFix Reflex.Spider.Internal.EventM instance GHC.Base.Monad Reflex.Spider.Internal.EventM instance GHC.Base.Applicative Reflex.Spider.Internal.EventM instance GHC.Base.Functor Reflex.Spider.Internal.EventM instance Control.Monad.Fix.MonadFix Reflex.Spider.Internal.BehaviorM instance Control.Monad.IO.Class.MonadIO Reflex.Spider.Internal.BehaviorM instance GHC.Base.Monad Reflex.Spider.Internal.BehaviorM instance GHC.Base.Applicative Reflex.Spider.Internal.BehaviorM instance GHC.Base.Functor Reflex.Spider.Internal.BehaviorM instance Data.GADT.Compare.GEq k => Data.GADT.Compare.GEq (Reflex.Spider.Internal.FanSubscriberKey k) instance Data.GADT.Compare.GCompare k => Data.GADT.Compare.GCompare (Reflex.Spider.Internal.FanSubscriberKey k) instance GHC.Base.Functor Reflex.Spider.Internal.Event instance GHC.Base.Functor Reflex.Spider.Internal.Behavior instance Reflex.Class.Reflex Reflex.Spider.Internal.Spider instance Reflex.Class.MonadSample Reflex.Spider.Internal.Spider Reflex.Spider.Internal.SpiderHost instance Reflex.Class.MonadHold Reflex.Spider.Internal.Spider Reflex.Spider.Internal.SpiderHost instance Reflex.Class.MonadSample Reflex.Spider.Internal.Spider Reflex.Spider.Internal.BehaviorM instance Reflex.Class.MonadSample Reflex.Spider.Internal.Spider Reflex.Spider.Internal.EventM instance Reflex.Class.MonadHold Reflex.Spider.Internal.Spider Reflex.Spider.Internal.EventM instance Reflex.Host.Class.ReflexHost Reflex.Spider.Internal.Spider instance Reflex.Host.Class.MonadReadEvent Reflex.Spider.Internal.Spider Reflex.Spider.Internal.ResultM instance Control.Monad.TypedId.MonadTypedId Reflex.Spider.Internal.EventM instance Control.Monad.Ref.MonadRef Reflex.Spider.Internal.EventM instance Reflex.Class.MonadSample Reflex.Spider.Internal.Spider Reflex.Spider.Internal.SpiderHostFrame instance Reflex.Class.MonadHold Reflex.Spider.Internal.Spider Reflex.Spider.Internal.SpiderHostFrame instance Reflex.Host.Class.MonadReflexCreateTrigger Reflex.Spider.Internal.Spider Reflex.Spider.Internal.SpiderHost instance Reflex.Host.Class.MonadReflexCreateTrigger Reflex.Spider.Internal.Spider Reflex.Spider.Internal.SpiderHostFrame instance Reflex.Host.Class.MonadReflexHost Reflex.Spider.Internal.Spider Reflex.Spider.Internal.SpiderHost instance Control.Monad.Ref.MonadRef Reflex.Spider.Internal.SpiderHost instance Control.Monad.Ref.MonadRef Reflex.Spider.Internal.SpiderHostFrame module Reflex.Spider data Spider newtype SpiderHost a SpiderHost :: IO a -> SpiderHost a [runSpiderHost] :: SpiderHost a -> IO a module Reflex