Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data Sig a
- newSig :: Fay (Ptr (Sig a))
- data Ref a
- newRef :: Ptr a -> Fay (Ptr (Ref a))
- data Var a
- newVar :: Ptr a -> Fay (Ptr (Var a))
- class Settable v
- set :: Settable (v a) => Ptr (v a) -> Ptr a -> Fay ()
- class Gettable v
- get :: Gettable (v a) => Ptr (v a) -> Fay (Ptr a)
- modify :: (Settable (v a), Gettable (v a)) => v a -> (a -> a) -> Fay ()
- modifyWith :: (Settable (v a), Gettable (v a)) => v a -> (a -> Fay a) -> Fay ()
- class Settable v => Subscribable v
- subscribe :: Subscribable (v a) => Ptr (v a) -> Ptr (a -> Fay void) -> Fay (() -> Fay ())
- withUnsubscriber :: ((a -> Fay ()) -> Fay (() -> Fay ())) -> ((() -> Fay ()) -> a -> Fay ()) -> Fay (() -> Fay ())
- subscribeWithOld :: Var a -> (a -> a -> Fay ()) -> Fay (() -> Fay ())
- subscribeChange :: Eq a => Var a -> (a -> Fay ()) -> Fay (() -> Fay ())
- subscribeAndRead :: Var a -> (a -> Fay void) -> Fay (() -> Fay ())
- subscribeChangeAndRead :: Eq a => Var a -> (a -> Fay ()) -> Fay (() -> Fay ())
- subscribeExclusive :: Subscribable (v a) => v a -> (a -> Fay ()) -> Fay (a -> Fay (), () -> Fay ())
- subscribeAndReadExclusive :: Var a -> (a -> Fay ()) -> Fay (a -> Fay (), () -> Fay ())
- mapVar :: (a -> b) -> Var a -> Fay (Var b)
- mergeVars :: (a -> b -> c) -> Maybe (c -> (a, b)) -> Var a -> Var b -> Fay (Var c, Fay ())
- mergeVars' :: (a -> b -> c) -> Maybe (c -> (a, b)) -> Var a -> Var b -> Fay (Var c)
- tupleVars :: Var a -> Var b -> Fay (Var (a, b), Fay ())
- tupleVars' :: Var a -> Var b -> Fay (Var (a, b))
- waitForN :: Int -> Fay (Fay void -> Fay (), Sig ())
- waitFor :: Var a -> (a -> Bool) -> (a -> Fay ()) -> Fay ()
- oneShot :: Subscribable (v a) => v a -> (a -> Fay ()) -> Fay ()
- holdSig :: a -> Sig a -> Fay (Var a)
Different types of variables
A subscribable signal. Can have handlers subscribed to them, but doesn't store a value.
A mutable reference, with no subscribers.
A reactive variable. Stores a value, and can have handlers subscribed to changes.
Generic operations
All of the variable types can be set to a value.
set :: Settable (v a) => Ptr (v a) -> Ptr a -> Fay () Source #
Write to the value (if any), and call subscribers (if any).
modify :: (Settable (v a), Gettable (v a)) => v a -> (a -> a) -> Fay () Source #
Modifies the current value with a pure function.
modifyWith :: (Settable (v a), Gettable (v a)) => v a -> (a -> Fay a) -> Fay () Source #
Runs a Fay
action on the current value, and updates with the result.
class Settable v => Subscribable v Source #
Instances
Subscribable (Var a) Source # | |
Defined in Data.Var | |
Subscribable (Sig a) Source # | |
Defined in Data.Var |
withUnsubscriber :: ((a -> Fay ()) -> Fay (() -> Fay ())) -> ((() -> Fay ()) -> a -> Fay ()) -> Fay (() -> Fay ()) Source #
Run the same subscribing action but provide an additional unsubscribe parameter to the handler.
Specific operations
subscribeWithOld :: Var a -> (a -> a -> Fay ()) -> Fay (() -> Fay ()) Source #
Subscribe to a Var
, along with the previous value.
The result is an unsubscribe function.
subscribeChange :: Eq a => Var a -> (a -> Fay ()) -> Fay (() -> Fay ()) Source #
Subscribe to a Var
, but only call handler when it actually changes.
The result is an unsubscribe function.
subscribeAndRead :: Var a -> (a -> Fay void) -> Fay (() -> Fay ()) Source #
Subscribe to a Var
, and call the function on the current value.
The result is an unsubscribe function.
subscribeChangeAndRead :: Eq a => Var a -> (a -> Fay ()) -> Fay (() -> Fay ()) Source #
Subscribe to a Var
, but only call handler when it actually changes, and
also initially on registration.
The result is an unsubscribe function.
subscribeExclusive :: Subscribable (v a) => v a -> (a -> Fay ()) -> Fay (a -> Fay (), () -> Fay ()) Source #
Given a change handler, returns a function that can be used to set a
subscribable without invoking the handler. This can be useful in
situations where the handler for a Var
causes an event which otherwise
ought to set the value of the Var
. An example of this is interfacing
with HTML input field change events.
The snd
part of the result is an unsubscribe function.
subscribeAndReadExclusive :: Var a -> (a -> Fay ()) -> Fay (a -> Fay (), () -> Fay ()) Source #
Given a change handler, returns a function that can be used to set a var
without invoking the handler. The handler is called with the initial
value. This can be useful in situations where the handler for a Var
causes an event which otherwise ought to set the value of the Var
. An
example of this is interfacing with HTML input field change events.
The snd
part of the result is an unsubscribe function.
mapVar :: (a -> b) -> Var a -> Fay (Var b) Source #
Creates a Var
that updates whenever the source var is changed, applying
the provided function to compute the new value.
mergeVars :: (a -> b -> c) -> Maybe (c -> (a, b)) -> Var a -> Var b -> Fay (Var c, Fay ()) Source #
Creates a Var
that updates whenever one of its source vars are changed.
If the 2nd argument is a Just
value, then its used to set the source
vars when the variable is changed. Setting using a merged var is
sometimes preferred because both values are set before the subscribers
are called.
The snd
part of the result is an unsubscribe function.
mergeVars' :: (a -> b -> c) -> Maybe (c -> (a, b)) -> Var a -> Var b -> Fay (Var c) Source #
Like mergeVars
, but discards the unsubscribe function.
tupleVars' :: Var a -> Var b -> Fay (Var (a, b)) Source #
Like tupleVars
, but discards the unsubscribe function.
waitForN :: Int -> Fay (Fay void -> Fay (), Sig ()) Source #
Wait for n signals on the given signaller.
waitFor :: Var a -> (a -> Bool) -> (a -> Fay ()) -> Fay () Source #
Wait for the given predicate to be satisfied on the var and then unsubscribe.