-- 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