/%7      ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ experimentalconal@conal.netBSerializer. Turns actions into equivalent but serialized actions Make a locking serializer ,Make a locking serializer with a given lock  experimentalconal@conal.net7Returns the value in the IVar. The *value* will block $ until the variable becomes filled. 8Returns Nothing if the IVar has no value yet, otherwise  returns the value. 8Puts the value of the IVar. If it already has a value,  block forever.  experimentalconal@conal.net experimentalconal@conal.netOrdered monoid under .     experimentalconal@conal.net Ordered monoid under .      experimentalconal@conal.net=Wrap a type into one having new least and greatest elements, # preserving the existing ordering. non-portable (concurrency) experimentallibraries@haskell.org = is an abstract type representing an unbounded FIFO channel. $Build and returns a new instance of . Write a value to a . Read the next value from the .  Duplicate a :: the duplicate channel begins empty, but data written to N either channel from then on will be available from both. Hence this creates F a kind of broadcast channel, where data written by anyone is seen by  everyone else. JPut a data item back onto a channel, where it will be the next item read. Returns  if the supplied  is empty. =Return a lazy list representing the contents of the supplied   , much like System.IO.hGetContents. #Write an entire list of items to a . BA weak channel writer. Sustained by the read head. Thus channel ) consumers keep channel producers alive.    experimentalconal@conal.netConstant-optimized functions non-constant function constant function  experimentalconal@conal.netValue consumer +Convenient alias for dropping parentheses.     experimentalconal@conal.net!A future value of type a with time type t . Simply a  time/;value pair. Particularly useful with time types that have  non-flat structure. $%Time used in futures. The parameter t can be any Ord and  Bounded type. Pure values have time , while # never-occurring futures have time  'maxBound.' ! type Time t = Max (AddBounds t) &"Apply a unary function within the !  representation. '#Apply a binary function within the !  representation. (ERun a future in the current thread. Use the given time sink to sync F time, i.e., to wait for an output time before performing the action. !"#$%&'($!"#%&'(!"#"#$%&'(  experimentalconal@conal.net )EReactive value: a discretely changing value. Reactive values can be H understood in terms of (a) a simple denotational semantics of reactive F values as functions of time, and (b) the corresponding instances for 4 functions. The semantics is given by the function at :: ReactiveG t a ->  (t -> a)?. A reactive value may also be thought of (and in this module L is implemented as) a current value and an event (stream of future values). The semantics of ) & instances are given by corresponding / instances for the semantic model (functions):  : at (fmap f r) == fmap f (at r), i.e.,  fmap f r at  t == f (r at t).   Applicative: at (pure a) == pure a, and at (s <*> r) == at s  <*> at t . That is, pure a at t == a, and (s <*> r) at t  == (s at t) (r at t).  : at (return a) == return a, and at (join rr) == join (at  . at rr) . That is,  return a at t == a, and join rr at t ==  (rr at t) at t. As always, (r >>= f) == join (fmap f r).  at (r >>= f) == at r >>= at . f.  Monoid: a typical lifted monoid. If o is a monoid, then   Reactive o is a monoid, with mempty == pure mempty, and mappend  == liftA2 mappend . That is, mempty at t == mempty, and (r  mappend s) at t == (r at t) mappend (s at t). +;Events. Semantically: time-ordered list of future values.  Instances:  Monoid: mempty% is the event that never occurs, and e mappend  e'- is the event that combines occurrences from e and e'.  : fmap f e# is the event that occurs whenever e occurs, 2 and whose occurrence values come from applying f to the values from  e.   Applicative: pure a. is an event with a single occurrence at time  -Infinity. ef <*> ex- is an event whose occurrences are made from  the product of the occurrences of ef and ex. For every occurrence  f at time tf of ef and occurrence x at time tx of ex, ef  <*> ex has an occurrence f x at time tf  tx . N.B.: I  don'.t expect this instance to be very useful. If ef has nf  instances and ex has nx instances, then ef <*> ex has nf*nx ' instances. However, there are only nf+nx possibilities for tf   tx=, so many of the occurrences are simultaneous. If you think 1 you want to use this instance, consider using Reactive instead.  : return a is the same as pure a (as usual). In e >>= f,  each occurrence of e leads, through f, to a new event. Similarly  for join ee7, which is somehow simpler for me to think about. The  occurrences of e >>= f (or join ee!) correspond to the union of the I occurrences (temporal interleaving) of all such events. For example,  suppose we'>re playing Asteroids and tracking collisions. Each collision L can break an asteroid into more of them, each of which has to be tracked = for more collisions. Another example: A chat room has an enter event, - whose occurrences contain new events like speak. An especially useful  monad-based function is  joinMaybes, which filters a Maybe-valued  event. .!Apply a unary function inside an +  representation. /!Apply a unary function inside an +  representation. 0"Apply a unary function inside the rEvent part of a Reactive  representation. 1;Apply a unary function inside the future reactive inside a Reactive  representation. 3&Make the event into a list of futures 4ERun an event in the current thread. Use the given time sink to sync F time, i.e., to wait for an output time before performing the action. 5FRun an event in a new thread, using the given time sink to sync time. 6FRun a reactive value in the current thread, using the given time sink  to sync time. 7CRun a reactive value in a new thread, using the given time sink to ? sync time. The initial action happens in the current thread. )*+,-./01234567+,-2./3)*014657)**+,-,-./01234567  experimentalconal@conal.net8An improving value. <$A known improving value (which doesn't really improve) =A value known to be < x. >A value known to be > x. ?Efficient combination of  and '(<=)' @Efficient combination of  and '(>=)' 89:;<=>?@A 89:;<=>?@A 89:;9:;<=>?@A  experimentalconal@conal.netC  as a function BCDBCDBCD  experimentalconal@conal.netEMake a finite time FA future's time GA future's value HA future value with given time & value IAccess time of future !"#$%&'EFGHIJ $E!"#%&'FGHIJEFGHIJ experimentalconal@conal.net Merge two "  reactives into one. KExperimental specialization of ]. LExperimental specialization of ^. M<Reactive value from an initial value and a new-value event. N Switch between reactive values.  Reactive  (equivalent to ' but slightly more efficient, I think) O/Access occurrence times in an event. See also P. P7Access occurrence times in a reactive value. See also O. QFConvert a temporally monotonic list of futures to an event. See also  the specialization listE R;Convert a temporally monotonic list of futures to an event SDConvert a temporally monotonic stream of futures to an event. Like  R$ but it can be lazier, because there's not empty case. T Event at given times. See also U. U'Single-occurrence event at given time. V?Snapshot a reactive value whenever an event occurs and apply a - combining function to the event and reactive' s values. +Skip reactive values until the given time. W9Accumulating event, starting from an initial value and a " update-function event. See also X. XEReactive value from an initial value and an updater event. See also  W. Y'Just the first occurrence of an event. ZIExtract a future representing the first occurrence of the event together 3 with the event of all occurrences after that one. [1Access the remainder with each event occurrence. \:Truncate first event at first occurrence of second event. (Truncate first event at the given time. FSample a reactive value at a sequence of monotonically non-decreasing G times. Deprecated, because it does not reveal when value is known to - be repeated in the output. Those values won't be recomputed, but they  may be re-displayed. ] Pass through Just occurrences. ^Pass through values satisfying p. _>Apply a given function inside the results of other functions.  Equivalent to '(.)'(, but has a nicer reading when composed )+KLMNOPQRSTUVWXYZ[\]^_`abc+)MNOPRSQTUVWXY[\KLZ]^_b`caKLMNOPQRSTUVWXYZ[\]^_`abc experimentalconal@conal.net*d;Reactive values, specialized to improving doubles for time e2Events, specialized to improving doubles for time f$Type of future values. Specializes ! . g,Improving times, as used for time values in e, d,  and  ReactiveB. i,The type of time values with additional min & max elements. jExact & finite content of an h k&Trace the elements of a functor type. l*Access occurrence times in an event. See O for more  general notions of time. * withTimeE :: Event a -> Event (a, TimeT) mBAccess occurrence times in an event. Discard the rest. See also  l. & withTimeE_ :: Event a -> Event TimeT n,Single-occurrence event at given time. See o and U. o)Event occuring at given times. See also n and U. pKConvert a temporally monotonic list of timed values to an event. See also  the generalization Q qCGenerate a pair-valued event, given a pair of initial values and a  pair of events. See also pair on d. Not quite a , ' because of the initial pair required. rLike  for events. s@Accumulate values from a monoid-typed event. Specialization of  r, using  and . tCDecompose an event into its first occurrence value and a remainder  event. See also u and v. u:Extract the first occurrence value of an event. See also  t and v. vFExtract the remainder an event, after its first occurrence. See also  t and u. w&Remaining part of an event. See also [. xETack remainders a second event onto values of a first event. Occurs  when the first event occurs. yBConvert an event into a single-occurrence event, whose occurrence  contains the remainder. zCPair each event value with the previous one. The second result is A the old one. Nothing will come out for the first occurrence of e, " but if you have an initial value a , you can do withPrevE (pure a   e). {Same as z., but allow a function to combine the values.  Provided for convenience. |CPair each event value with the next one one. The second result is  the next one. }Same as |., but allow a function to combine the values.  Provided for convenience. ~>Mealy-style state machine, given initial value and transition 0 function. Carries along event data. See also . >Mealy-style state machine, given initial value and transition ! function. Forgetful version of ~. BCount occurrences of an event, remembering the occurrence values.  See also . FCount occurrences of an event, forgetting the occurrence values. See  also . 1Difference of successive event occurrences. See z for a , trick to supply an initial previous value. 4Snapshot a reactive value whenever an event occurs. Like " but discarding event data (often a is '()'). AFilter an event according to whether a reactive boolean is true. Like  for reactive values. See also r. AAccumulate values from a monoid-valued event. Specialization of  r, using  and  . See also s. Combine two events into one. Start out blank (), latching onto each new a, and blanking  on each b5. If you just want to latch and not blank, then use   for lose. /Flip-flopping reactive value. Turns true when ea occurs and false  when eb occurs. )Count occurrences of an event. See also . "Partition an event into segments. 8Switch from one event to another, as they occur. (Doesn' t merge, as   does.) Euler integral. H)+:KLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~.hjigfkelmnopqrstuvwxyz{|}~d:-defghijklmnopqrstuvwxyz{|}~ experimentalconal@conal.netAReactive behaviors. They can be understood in terms of a simple = model (denotational semantics) as functions of time, namely at ::  BehaviorG t a -> (t -> a). The semantics of & instances are given by corresponding 4 instances for the semantic model (functions). See   Lhttp://conal.net/blog/posts/simplifying-semantics-with-type-class-morphisms/.  : at (fmap f r) == fmap f (at r), i.e.,  fmap f r at  t == f (r at t).  : at (pure a) == pure a, and at (s <*> r) == at s  <*> at t . That is, pure a at t == a, and (s <*> r) at t  == (s at t) (r at t).  : at (return a) == return a, and at (join rr) == join (at  . at rr) . That is,  return a at t == a, and join rr at t ==  (rr at t) at t. As always, (r >>= f) == join (fmap f r).  at (r >>= f) == at r >>= at . f.  : a typical lifted monoid. If o is a monoid, then   Reactive o is a monoid, with mempty == pure mempty, and mappend  == liftA2 mappend . That is, mempty at t == mempty, and (r   s) at t == (r at t)  (s at t). (Wrap a reactive time fun as a behavior. Unwrap a behavior.  experimentalconal@conal.netTime-specialized behaviors. O Note: The signatures of all of the behavior functions can be generalized. Is 0 the interface generality worth the complexity? .The identity generalized behavior. Has value t at time t.  time :: Behavior TimeT >Discretely changing behavior, based on an initial value and a  new-value event. &stepper :: a -> Event a -> Behavior a Switch between behaviors. < switcher :: Behavior a -> Event (Behavior a) -> Behavior a FSnapshots a behavior whenever an event occurs and combines the values I using the combining function passed. Take careful note of the order of  arguments and results. C snapshotWith :: (a -> b -> c) -> Behavior b -> Event a -> Event c 8Snapshot a behavior whenever an event occurs. See also  3. Take careful note of the order of arguments and  results. 2 snapshot :: Behavior b -> Event a -> Event (a,b) Like " but discarding event data (often a is '()'). / snapshot_ :: Behavior b -> Event a -> Event b AFilter an event according to whether a reactive boolean is true. . whenE :: Behavior Bool -> Event a -> Event a ?Behavior from an initial value and an updater event. See also  accumE. - accumB :: a -> Event (a -> a) -> Behavior a Like  for behaviors. See also scanlE. L scanlB :: forall a. (Behavior a -> Behavior a -> Behavior a) -> Behavior a , -> Event (Behavior a) -> Behavior a AAccumulate values from a monoid-valued event. Specialization of  , using  and  . See also monoidE. 9 monoidB :: Monoid a => Event (Behavior a) -> Behavior a Like  for behaviors. 2 sumB :: AdditiveGroup a => Event a -> Behavior a Start out blank (), latching onto each new a, and blanking  on each b5. If you just want to latch and not blank, then use   for the second event. 4 maybeB :: Event a -> Event b -> Behavior (Maybe a) DFlip-flopping behavior. Turns true whenever first event occurs and ) false whenever the second event occurs. 1 flipFlop :: Event a -> Event b -> Behavior Bool )Count occurrences of an event. See also countE. * countB :: Num n => Event a -> Behavior n Euler integral. 2 integral :: (VectorSpace v, Scalar v ~ TimeT) => 2 Event () -> Behavior v -> Behavior v   experimentalconal@conal.net! experimentalconal@conal.net6Waits a specified duration and then execute an action , type Delay t = t -> forall a. IO a -> IO a DWaits until just after a specified time and then execute an action,  passing in the actual time. & type Schedule t = t -> Sink (Sink t) BA serializing clock. Can (a) produce a time and (b) serialize an  action.  Make a clock 5Get the current time in seconds, relative to a start "#.  experimentalconal@conal.net Execute an action-valued event. EIf a sample variable is full, act on the contents, leaving it empty. CMake an action to be executed regularly, given a time-source and a E action-behavior. The generated action is optimized to do almost no : work during known-constant phases of the given behavior. 1Pause a thread for the given duration in seconds Sleep past a given time  Variant of ", taking a possibly-infinite time  experimentalconal@conal.net,A value that becomes defined at some time.  may block if  forced before the time & value are knowable.  says whether D the value is defined at (and after) a given time and likely blocks 2 until the earlier of the query time and the value's actual time. Make a '(:-->)'. An a that' s fed by a b  as Future  as 8  Make a connected sink/4future pair. The sink may only be written to once. ?Make a new event and a sink that writes to it. Uses the given $ clock to serialize and time-stamp.  Variation on ", returning a stream instead of a  list. Note that  only makes infinite lists. I'm 8 hoping to get some extra laziness by using irrefutable $% pattern  when consuming the stream. & experimentalconal@conal.net   ' experimentalconal@conal.net4+KLWY[\]^egilmnopqrstuvxz{~4ig+eWlmqrs~z{KLponYtuvx[\]^()*+,-./001223456789:;<=>?@ABBCDE F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h f i j k l m fnopqrstuvwxyz{|}~fQGfpqy"#$% reactive-0.11FRP.Reactive.Internal.SerialFRP.Reactive.Internal.IVarData.MaxData.MinData.AddBoundsFRP.Reactive.Internal.ChanFRP.Reactive.Internal.FunFRP.Reactive.Internal.MiscFRP.Reactive.Internal.FutureFRP.Reactive.Internal.ReactiveFRP.Reactive.ImprovingFRP.Reactive.FunFRP.Reactive.FutureFRP.Reactive.PrimReactiveFRP.Reactive.ReactiveFRP.Reactive.Internal.BehaviorFRP.Reactive.BehaviorFRP.Reactive.Internal.ClockFRP.Reactive.Internal.TimingFRP.Reactive.Internal.TValData.PairMonadbaseData.Ordghc-primGHC.BoolPrelude Control.Monad Data.List Data.Monoid Data.MaybeControl.ApplicativeFRP.Reactive.NumFRP.Reactive.VectorSpaceold-time-1.0.0.2 System.Time Stream-0.3.1 Data.StreamFRP.Reactive.LegacyAdapters FRP.ReactiveSerial makeSeriallockingIVarnewIVarreadIVar tryReadIVar writeIVarMaxgetMaxMingetMin AddBoundsMaxBoundNoBoundMinBoundChannewChan writeChanreadChandupChan unGetChan isEmptyChangetChanContentswriteList2ChanweakChanWriterFunKSinkActionFutureGFutureunFutureTimeisNeverFinFuture inFuture2runF ReactiveGStepperEventGEventeFutureinEventinEvent2inREventinFutRisNeverEeFuturesrunEforkErunRforkR ImprovingImpexactcompareIexactlybeforeafterminImaxIbatchfunapplyftimefutTimefutValfuture withTimeFjustEfilterEstepperswitcher withTimeGE withTimeGRlistEGfuturesE futureStreamEatTimesGatTimeG snapshotWithaccumEaccumRonceeventOcc withRestEuntilE joinMaybesfilterMPresultmonoid_E isMonotoneRinfEReactiveITime ImpBoundsTimeTexactNBtraceF withTimeE withTimeE_atTimeatTimeslistEzipEscanlEmonoidE firstRestEfirstErestE remainderRsnapRemainderE onceRestE withPrevE withPrevEWith withNextE withNextEWithmealymealy_countEcountE_diffEsnapshot snapshot_whenEscanlRmonoidReitherEmaybeRflipFlopcountRsplitEswitchEintegralsumR BehaviorGBehunBehbehunb BehaviourBehaviortimeaccumBscanlBmonoidBsumBmaybeBcountBClockcGetTime cSerialize makeClockadaptE mkUpdater sleepPast:+->:--> makeEvent GHC.ClassesmaxminTrueGHC.EnumminBoundGHC.BaseFunctorMonadmergejoinRjoinskipRTuntilETratsGHC.ListzipscanlmappendmemptyNothing ApplicativeMonoidsum currRelTime ClockTimedrainSsleep sleepPast'TValtimeVal definedAt tValFuturetValImp makeFuture getChanStreamCons