Îõ³h&`Ž\˜®      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–— ˜ ™ š › œ  ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬­ Ç(c) Ivan Perez, 2014-2023 (c) George Giorgidze, 2007-2012 (c) Henrik Nilsson, 2005-2006 (c) Antony Courtney and Henrik Nilsson, Yale University, 2003-2004BSD3ivan.perez@keera.co.uk provisionalportable Safe-InferredI bearriverDuplicate an input.J bearriver%Lift a binary function onto an arrow.K bearriver$Lift a 3-ary function onto an arrow.L bearriver$Lift a 4-ary function onto an arrow.M bearriver$Lift a 5-ary function onto an arrow.IJKLMIJKLMÇ(c) Ivan Perez, 2014-2022 (c) George Giorgidze, 2007-2012 (c) Henrik Nilsson, 2005-2006 (c) Antony Courtney and Henrik Nilsson, Yale University, 2003-2004BSD3ivan.perez@keera.co.uk provisionalportable Safe-InferredmN bearriver“A single possible event occurrence, that is, a value that may or may not occur. Events are used to represent values that are not produced continuously, such as mouse clicks (only produced when the mouse is clicked, as opposed to mouse positions, which are always defined).Q bearriver“Make the NoEvent constructor available. Useful e.g. for initialization, ((-->) & friends), and it's easily available anyway (e.g. mergeEvents []).R bearriver4Suppress any event in the first component of a pair.S bearriver5Suppress any event in the second component of a pair.T bearriver-An event-based version of the maybe function.U bearriver)Y bearriverÍTags an (occurring) event with a value ("replacing" the old value). Same as X with the arguments swapped.,Applicative-based definition: tagWith = (<$)Z bearriver;Attaches an extra value to the value of an occurring event.[ bearriver?Left-biased event merge (always prefer left event, if present).\ bearriverÁRight-biased event merge (always prefer right event, if present).] bearriver:Unbiased event merge: simultaneous occurrence is an error.^ bearriver t (Event a) -> Event a mergeEvents = asuma bearriver9Collect simultaneous event occurrences; no event if none.b bearriverÏJoin (conjunction) of two events. Only produces an event if both events exist.1Applicative-based definition: joinE = liftA2 (,)c bearriver+Split event carrying pairs into two events.d bearriver4Filter out events that don't satisfy some predicate.e bearriver2Combined event mapping and filtering. Note: since N is a ¯, see °: for a simpler version of this function with no filtering.f bearriverÀEnable/disable event occurrences based on an external condition.g bearriver$Convert a maybe value into a event (N is isomorphic to ±).h bearriverNFData instance.i bearriverAlternative instance.j bearriverMonadFail instancek bearriverMonad instance.l bearriver!Applicative instance (similar to ±).m bearriver$Functor instance (could be derived)._ bearriver2Mapping function used when first event is present. bearriver3Mapping function used when second event is present. bearriver3Mapping function used when both events are present. bearriver First event bearriver Second eventNOPQRSTUVWXYZ[\]^_`abcdefgNOPQRSTUVWXYZ[\]^_`abcdefgX8Z8[6\6]6b7f8 Ç(c) Ivan Perez, 2014-2022 (c) George Giorgidze, 2007-2012 (c) Henrik Nilsson, 2005-2006 (c) Antony Courtney and Henrik Nilsson, Yale University, 2003-20044BSD-style (see the LICENSE file in the distribution)ivan.perez@keera.co.uk provisionalnon-portable (GHC extensions) Safe-Inferredq bearriver$Information on the progress of time.² bearriverìExtensible signal function (signal function with a notion of time, but which can be extended with actions).ÆSignal function that transforms a signal carrying values of some type a- into a signal carrying values of some type bÝ. You can think of it as (Signal a -> Signal b). A signal is, conceptually, a function from s to value.r bearriver¢DTime is the time type for lengths of sample intervals. Conceptually, DTime = R+ = { x in R | x > 0 }. Don't assume Time and DTime have the same representation.s bearriveræTime is used both for time intervals (duration), and time w.r.t. some agreed reference point in time.q²rsÇ(c) Ivan Perez, 2014-2022 (c) George Giorgidze, 2007-2012 (c) Henrik Nilsson, 2005-2006 (c) Antony Courtney and Henrik Nilsson, Yale University, 2003-20044BSD-style (see the LICENSE file in the distribution)ivan.perez@keera.co.uk provisionalnon-portable (GHC extensions) Safe-Inferred]t bearriverIdentity: identity = arr idUsing tŽ is preferred over lifting id, since the arrow combinators know how to optimise certain networks based on the transformations being applied.u bearriver$Identity: constant b = arr (const b)Using u‘ is preferred over lifting const, since the arrow combinators know how to optimise certain networks based on the transformations being applied.v bearriver5Initialization operator (cf. Lustre/Lucid Synchrone).…The output at time zero is the first argument, and from that point on it behaves like the signal function passed as second argument.w bearriverOutput pre-insert operator.ÑInsert a sample in the output, and from that point on, behave like the given sf.x bearriverInput initialization operator.„The input at time zero is the first argument, and from that point on it behaves like the signal function passed as second argument.y bearriverTransform initial output value.Applies a transformation f- only to the first output value at time zero.z bearriverTransform initial input value.Applies a transformation f, only to the first input value at time zero.{ bearriver'Override initial value of input signal.tuvwxyz{tuvwxyz{v0w0x0y0z0Ç(c) Ivan Perez, 2014-2023 (c) George Giorgidze, 2007-2012 (c) Henrik Nilsson, 2005-2006 (c) Antony Courtney and Henrik Nilsson, Yale University, 2003-20044BSD-style (see the LICENSE file in the distribution)ivan.perez@keera.co.uk provisionalnon-portable (GHC extensions) Safe-Inferred"| bearriver‰Applies a function point-wise, using the last output as next input. This creates a well-formed loop based on a pure, auxiliary function.} bearriverGeneric version of |Ù, in which the auxiliary function produces an internal accumulator and an "held" output.4Applies a function point-wise, using the last known ³Ê output to form the output, and next input accumulator. If the output is ´î, the last known accumulators are used. This creates a well-formed loop based on a pure, auxiliary function.|}|}Ç(c) Ivan Perez, 2014-2023 (c) George Giorgidze, 2007-2012 (c) Henrik Nilsson, 2005-2006 (c) Antony Courtney and Henrik Nilsson, Yale University, 2003-20044BSD-style (see the LICENSE file in the distribution)ivan.perez@keera.co.uk provisionalnon-portable (GHC extensions) Safe-Inferred& ~ bearriverUninitialized delay operator.ÛThe output has an infinitesimal delay (1 sample), and the value at time zero is undefined. bearriverInitialized delay operator.£Creates an SF that delays the input signal, introducing an infinitesimal delay (one sample), using the given argument to fill in the initial output at time zero.€ bearriver‡ bearriverEvent source that never occurs.ˆ bearriverëEvent source with a single occurrence at time 0. The value of the event is given by the function argument.‰ bearriverÇEvent source with a single occurrence at or as soon after (local) time q as possible.Š bearriver7Event source with repeated occurrences with interval q.¡Note: If the interval is too short w.r.t. the sampling intervals, the result will be that events occur at every sample. However, no more than one event results from any sampling interval, thus avoiding an "event backlog" should sampling become more frequent at some later point in time.‹ bearriverÁEvent source with consecutive occurrences at the given intervals.ˆShould more than one event be scheduled to occur in any sampling interval, only the first will in fact occur to avoid an event backlog.Œ bearriverÁEvent source with consecutive occurrences at the given intervals.’Should more than one event be scheduled to occur in any sampling interval, the output list will contain all events produced during that interval. bearriverÜA rising edge detector. Useful for things like detecting key presses. It is initialised as upÀ, meaning that events occurring at time 0 will not be detected.Ž bearriver6A rising edge detector that can be initialized as up (µÊ, meaning that events occurring at time 0 will not be detected) or down (¶=, meaning that events occurring at time 0 will be detected).· bearriver6A rising edge detector that can be initialized as up (µÊ, meaning that events occurring at time 0 will not be detected) or down (¶=, meaning that events occurring at time 0 will be detected). bearriverLike %, but parameterized on the tag value. bearriver6 to every input. Freezes temporarily if the input is P, and continues as soon as an N is received.œ bearriver Convert an N into a ± value.ÍBoth types are isomorphic, where a value containing an event is mapped to a ³, and P is mapped to ´ý. There is, however, a semantic difference: a signal carrying a Maybe may change constantly, but, for a signal carrying an Nó, there should be a bounded frequency such that sampling the signal faster does not render more event occurrences. bearriverCreate an event if a ¸ is µ.ž bearriverZero-order hold.ŠConverts a discrete-time signal into a continuous-time signal, by holding the last value until it changes in the input signal. The given parameter may be used for time zero, and until the first event occurs in the input signal, so hold is always well-initialized.×embed (hold 1) (deltaEncode 0.1 [NoEvent, NoEvent, Event 2, NoEvent, Event 3, NoEvent]) [1,1,2,2,3,3]Ÿ bearriver7Accumulator parameterized by the accumulation function.  bearriverÇZero-order hold accumulator parameterized by the accumulation function.¡ bearriver9Loop with an initial value for the signal being fed back.¢ bearriver%Integration using the rectangle rule.£ bearriver¡Integrate using an auxiliary function that takes the current and the last input, the time between those samples, and the last output, and returns a new output.¤ bearriverûA very crude version of a derivative. It simply divides the value difference by the time difference. Use at your own risk.¥ bearriverûA very crude version of a derivative. It simply divides the value difference by the time difference. Use at your own risk.H?@ABCDEGFIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgq²rstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«™š›œžŸ ¡¢£¤¥¦§¨©ª«Ô(c) Ivan Perez, 2019-2022 (c) Ivan Perez and Manuel Baerenz, 2016-2018BSD3ivan.perez@keera.co.uk Safe-InferredZì¬ bearriverâFuture signal function (conceptually, a function between future signals that respects causality).ÄA future signal is a signal that is only defined for positive times.­ bearriverÔSignal function (conceptually, a function between signals that respects causality).¥   !"#$%&'()*+,-./0123456789:;<=>H?@ABCDEGFIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­¥   !"#$%&'()*+,-./0123456789:;<=>H?@ABCDEGFIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«­¬¹                     ! " # $ % & ' ( ) *+ *,-./-.0-.1-.2-.3-.4-.5-.6-.7-.8-.9-.:-.;-.<-.=-.>-.?-.@-.A-BC-BD-BE-BF-BG-BH-BI-BJ-KL-KM-KN-KOPQRPQSPQTPQUPQVPQWPQXPQYPQZPQ[\]^_`aabcdefghijklmnopqrstuvwxyz{|}~€‚ ƒ „ …†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½¾¿ ÀÁ À Àà ÄÅ ¿ ÄÆ ÄÇÈÉÊÈÉËÌÈÉÍÎ'bearriver-0.14.5-LPUW5Xs9JdZ1T64EsCWOgj FRP.YampaFRP.BearRiver.ArrowFRP.BearRiver.EventFRP.BearRiver.BasicFRP.BearRiver.ScanFRP.BearRiver.DelaysFRP.BearRiver.SwitchesFRP.BearRiver.EventSFRP.BearRiver.Conditional FRP.BearRiverFRP.BearRiver.InternalCorebase Control.Arrowarrfirstapp|||loop runKleisliKleisli zeroArrow ArrowZero<+> ArrowPlus ArrowMonad ArrowLooprightleft+++ ArrowChoice ArrowApplysecond***&&&ArrowreturnAleftApp^>>^<<>>^<<^Control.Category>>><<<#dunai-0.12.0-2w5AnQSqqnXI1DiWpopaNPData.MonadicStreamFunction.UtilpauseOn traceWhen traceWithunfoldmealyaccumulateWith mappendFrommappendSsumFromsumScountfifonextiPostwithSideEffect_withSideEffect mapMaybeSMStreamMSinkData.MonadicStreamFunction.CoremorphS liftTransS>>>^^>>> liftBaseS liftBaseMarrMconstM'Data.MonadicStreamFunction.InternalCoreembedfeedbackmorphGSMSF0simple-affine-space-0.2.1-5U7b2jMMVKYG6R5JnFSAHBData.VectorSpace normalizenormdot negateVector^-^^+^^/*^ zeroVector VectorSpaceduparr2arr3arr4arr5EventNoEventnoEvent noEventFst noEventSndevent fromEventisEvent isNoEventtagtagWithattachlMergerMergemergemergeBymapMerge mergeEvents catEventsjoinEsplitEfilterE mapFilterEgate maybeToEvent $fNFDataEvent$fAlternativeEvent$fMonadFailEvent $fMonadEvent$fApplicativeEvent$fFunctorEvent $fEqEvent $fOrdEvent $fShowEvent ClockInfoDTimeTimeidentityconstant-->-:>>---=>>=- initiallysscan sscanPrimpreiPrefbydelayswitchdSwitchparB dpSwitchBparCnevernowafter repeatedly afterEach afterEachCatedgeiEdgeedgeTagedgeJustedgeBynotYetonce takeEvents dropEventssnapprovidedpause localTimetime mapEventS eventToMaybe boolToEventholdaccumBy accumHoldByloopPreintegral integralFrom derivativederivativeFromiterFrom occasionally reactimate evalAtZeroevalAt evalFutureFutureSFSFGHC.BaseidFunctorfmap GHC.MaybeMaybeJustNothingghc-prim GHC.TypesTrueFalseedgeFromBool