LdH      Safe ]List node. Used for insertion, traversal, and removal starting at a given item in the list.+A Node contains an immutable value of type a, and TVar-s that point to the previous and next nodes.Node equality can be likened to pointer equality in C. Two Node values are considered equal if and only if they were created with the same insertion operation.!" if this is the list head.#]List handle. Used for insertion and traversal starting at the beginning or end of the list.$ Unwrap the list head, a special   with the following properties: % . $ == & ' . $ == ( ) v . $ == * v + v . $ == , v - . $ ==> error . . $ ==> error-Extract the value of a node./O(1). Is the list empty?0O(n)(. Count the number of items in the list.1O(1). Create an empty linked list.2)Insert a node between two adjacent nodes.,O(1)/. Add a node to the beginning of a linked list.*O(1)). Add a node to the end of a linked list.)O(1)'. Insert an item before the given node.+O(1)&. Insert an item after the given node..O(1). Remove a node from whatever #C it is in. If the node has already been removed, this is a no-op.'O(1)!. Get the previous node. Return "6 if this is the first item, or if this node has been .d from its list.%O(1). Get the next node. Return "5 if this is the last item, or if this node has been .d from its list.&O(1)E. Get the node corresponding to the first item of the list. Return " if the list is empty.(O(1)D. Get the node corresponding to the last item of the list. Return " if the list is empty.3cTraverse list nodes with a fold function. The traversal terminates when the list head is reached."This is strict in the accumulator.4O(n). Return all of the items in a #.5O(n). Return all of the items in a #, in reverse order.6 789!#:$-/012,*)+.;'%&(3 Fold function Initial valueStep function (8 or 9).Starting node. This node's value is not used!45<6 789!#:$-/012,*)+.;'%&(3456 789!#:$-/012,*)+.;'%&(345<NoneCThis monad works very similar to a continuation monad on top of stm. You can do any basic stm computation you want simply using liftSTM. However, if you use getEvent< everything after that call will be executed everytime the = given to getEvent is changed.You can also use the >$ instance to make a union of events.You can also use the ? instance to run two things 'parallel'. Parallel meaning that events on one side will not cause the other side to be reevaluated completely.== is the portable Signal they can be exchanged between any parts of your program. Internally, they are just a variable and a list of change hooks. Pull based Updater Push based Updater. (Don't execute the io-action returned by newEvent. Also, fork; don't block.Just for some quick debugging !putLine = unsafeLiftIO . putStrLn6This can be useful to spot when listeners are removed.@The return value will remove the listener. IMPORTANT: If the remover gets garbage collected the listener will be removed. any references from the listener to the remover don't count.,=ABCD EFGHIJ@KLMNOPQR   =ABCD   EFGHIJ@KLMNOPQRNoneCGThe input will only be evaluated once, no matter how often the output  2 is used. Since it is stateless, when the output  1 is used, it will first have to wait for events.FThe input will only be evaluated once, no matter how often the ouput  1 is used. Since it is stateful, when the output  a is used, it will immediately continue with the last Event it received if such an event exists.EThis can be thought of as polling a behavior. It will only fire once.]This just only forwards the first event It is probably most useful for Events crated using e'Left io' events will be executed. The first 'Right res' event will end the function and return res.6This can be implemented using mfix, cacheStateful, ...If you get into trouble and really need multiple recursively defined Events you can use mfix to do that. You should however look at the implementation of  and the SlotMachine example first. In particular, make sure you understande that you need to use 'sample . hold' on the recursive signal in order to avoid infinite recursion.~This is just a convenience for use in ghci and in the test cases. It will just run the Event it is given in it's own thread. S   ST        !"#$%&'()*+,-./012345678#9:; !< !=>;?@ABCDEFGHIJKLMNOPQUpdat_7HgJsvcIAHSEo0nA8EjGJ4Updater.InternalUpdater Updater.List runUpdater'UpStatestateOnCleanup stateOnCommit DownStateBehavior getBehavior'Event getEvent' unsafeLiftIOdebug debugCleanuponCommitcacheStateful'cacheStateless' newEvent' runUpdaterjustOnenewEventcacheStateless cacheStatefulsampleholdrunEvent foldEventrunGlobalEventNode nodeValuebaseGHC.BaseNothing LinkedListlistHeadnextstartprevend insertBeforeappend insertAfterprependvaluedeletenulllengthempty insertBetween foldlHelpertoList toListRevNodePtrnodePrevnodeNext stepHelper$fEqNodeSignal Alternative Applicative addListener signalValuesignalListeners signalNum globalLock signalNumVarwithGlobalLock newSignal readSignal writeSignal fixUpdaterliftIO$fFunctorUpdater$fMonadUpdater$fAlternativeUpdater$fApplicativeUpdater$fMonadFixUpdater$fMonoidUpState $fMonoidEvent