h*f]҄      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                       0.3 Safe-Inferred)*  WidgetRattusComputes the same as   and  . In particular progressAndNext inp v = (progressInternal inp v, nextProgress (progressInternal inp v)).  WidgetRattusProgresses the continuous value, given the input value from some channel  WidgetRattusComputes the set of channels that the continuous value is depending on. That is if nextProgress v = cl and a new input inp on channel ch arrives, then progressInternal inp v = v if not (ch  cl). WidgetRattus,The "stable" type modality. A value of type Box a is a time-independent computation that produces a value of type a. Use ) and * to construct and consume -types. WidgetRattus A type is Stable0 if it is a strict type and the later modality O% and function types only occur under Box.%For example, these types are stable: Int,  Box (a -> b),  Box (O Int), Box (Sig a -> Sig b). But these types are not stable: [Int]) (because the list type is not strict),  Int -> Int!, (function type is not stable), O Int, Sig Int. WidgetRattusThe return type of the & primitive. WidgetRattus#The "later" type modality. A value v of type O 1 consists of two components: Its clock, denoted cl(v)?, and a delayed computation that will produce a value of type  as soon as the clock cl(v) ticks. The clock cl(v) is only used for type checking and is not directly accessible, whereas the delayed computation is accessible via % and &." WidgetRattus1This is the constructor for the "later" modality : :  N E t ::  --------------------  E delay t :: O +The typing rule requires that its argument t$ typecheck with an additional tick N of some clock .% WidgetRattus0This is the eliminator for the "later" modality :   E t :: O  ' tick-free ---------------------------------  Ncl(t) ' E adv t :: It requires that a tick N= is in the context whose clock matches exactly the clock of t, i.e.   = cl(t).& WidgetRattusIf we want to eliminate more than one delayed computation, i.e. two s :: O  and t :: O , we need to use & instead of just %.   E s :: O   E t :: O  ' tick-free --------------------------------------------------  Ncl(s)Ecl(t) ' E select s t :: Select   It requires that we have a tick N in the context whose clock matches the union of the clocks of s and t, i.e.  = cl(s)Ecl(t). The union of two clocks ticks whenever either of the two clocks ticks, i.e.  cl(s)Ecl(t) , whenever cl(s) or cl(t) ticks.That means there are three possible outcomes, which are reflected in the result type of  select s t . A value of  Select   is eithera value of type # and a delayed computation of type O  , if cl(s) ticks before cl(t),a value of type # and a delayed computation of type O  , if cl(t) ticks before cl(s), ora value of type  and a value of type , if cl(s) andcl(s) tick simultaneously.( WidgetRattus The clock of  never :: O > will never tick, i.e. it will never produce a value of type . With (3 we can for example implement the constant signal  x ::: never of type Sig a for any x :: a.) WidgetRattus2This is the constructor for the "stable" modality : 8 L E t ::  --------------------  E box t :: Box where L is obtained from  by removing all ticks and all variables x :: , where  is not a stable type.* WidgetRattus2This is the eliminator for the "stable" modality : 5  E t :: Box  ------------------  E unbox t :: . WidgetRattusAtomic version of /./ WidgetRattusFor promote to work, its argument must be stored in the "promote store", and whenenver an input is received on some channel, all values in the "promote store" must be advanced (using  ).,  !"#$%&'()*+,-./0, !"#$%&'()*+ ,-./0  Safe-Inferred WidgetRattusThis function provides a list (of the given length) of new names based on the given string. WidgetRattus This is the Q$-lifted version of 'abstractNewtype. WidgetRattusApply a class name to type arguments to construct a type class constraint. WidgetRattusThis function provides the name and the arity of the given data constructor, and if it is a GADT also its type. WidgetRattus7This function returns the name of a bound type variable WidgetRattusThis function abstracts away newtype# declaration, it turns them into data declarations.2 Safe-Inferred73 WidgetRattus.This annotation type is for internal use only.6 WidgetRattusBy default all Async Rattus functions are checked for use of lazy data types, since these may cause memory leaks. If any lazy data types are used, a warning is issued. These warnings can be disabled by annotating the module or the function with 7 {-# ANN myFunction AllowLazyData #-} {-# ANN module AllowLazyData #-}Async Rattus only allows guarded recursion, i.e. recursive calls must occur in the scope of a tick. Structural recursion over strict data types is safe as well, but is currently not checked. To disable the guarded recursion check, annotate the module or function with 8. {-# ANN myFunction AllowRecursion #-} {-# ANN module AllowRecursion #-}678345678345  Safe-Inferred)*' WidgetRattus"Syntax that may contain variables. WidgetRattusCompute the set of variables occurring in the given piece of syntax. The name falsely suggests that returns free variables, but in fact it returns all variable occurrences, no matter whether they are free or bound. WidgetRattusComputes the variables that are bound by a given piece of syntax. WidgetRattusCompute the dependencies of a bag of bindings, returning a list of the strongly-connected components.  Safe-Inferred"9  WidgetRattus!The set of stable built-in types. WidgetRattus t4, this function returns the list of type variables  [a1,...,am]" for which there is a constraint  Stable ai among  C1, ... Cn. WidgetRattusChecks a top-level definition group, which is either a single non-recursive definition or a group of (mutual) recursive definitions. WidgetRattusStabilizes the given context, i.e. remove all non-stable types and any tick. This is performed on checking box, and guarded recursive definitions. To provide better error messages a reason has to be given as well. WidgetRattus (exists q. Producer q a => O q)We encode the existential type using continuation-passing style.~ WidgetRattustimer n1 produces a delayed computation that ticks every n milliseconds. In particular mkSig (timer n). is a signal that produces a new value every n milliseconds. ~xzy{uvw|} ~xzy{uvw|} Safe-Inferred?a 0"()&*%uvwxzy}~{|DEFBCPRQSW[q\`JXITU^_bcdaVZYop]GHrs26782678 Safe-Inferred #Y" WidgetRattusSig a is a stream of values of type a. WidgetRattus"Get the current value of a signal. WidgetRattusGet the future the signal. WidgetRattus*Apply a function to the value of a signal. WidgetRattus A version of map for delayed signals. WidgetRattus8Turns a boxed delayed computation into a delayed signal. WidgetRattus Variant of $ that returns a boxed delayed signal WidgetRattus/Construct a constant signal that never updates. WidgetRattusSimilar to Haskell's . scan (box f) x (v1 ::: v2 ::: v3 ::: ... ) == (x `f` v1) ::: ((x `f` v1) `f` v2) ::: ... Note: Unlike ,  starts with x f v1, not x. WidgetRattus A variant of  that works with the u monad. WidgetRattusLike , but uses a delayed signal. WidgetRattus A variant of  that works with the u monad. WidgetRattus is a composition of  and : "scanMap f g x === map g . scan f x WidgetRattusjump (box f) xs first behaves like xs, but as soon as f x = Just xs'! for a (current or future) value x of xs, it behaves like xs'. WidgetRattus Similar to ', but it can jump repeatedly. That is, jumping (box f) xs first behaves like xs, but every time f x = Just xs'! for a (current or future) value x of jumping (box f) xs, it behaves like xs'. WidgetRattusStops as soon as the the predicate becomes true for the current value. That is, stop (box p) xs first behaves as xs, but as soon as  f x = True$ for some (current or future) value x of xs, then it behaves as const x. WidgetRattusThis function allows to switch from one signal to another one dynamically. The signal defined by  switch xs ys first behaves like xs, but as soon as ys produces a new value,  switch xs ys behaves like ys.Example:  xs: 1 2 3 4 5 6 7 8 9 ys: 1 2 3 4 5 6 switch xs ys: 1 2 3 1 2 4 3 4 5 6 WidgetRattusThis function is similar to , but the (future) second signal may depend on the last value of the first signal. WidgetRattusThis function is similar to 2 but works on delayed signals instead of signals. WidgetRattus Variant of . that repeatedly switches. The output signal  switch xs ys first behaves like xs, but whenever ys produces a value f, the signal switches to f v where v. is the previous value of the output signal. % can be considered a special case of  that only makes a single switch. That is we have the following: 3switchS xs ys = switchR (delay (const (adv xs))) ys WidgetRattus plus x y = Just' (x+y) WidgetRattus,Sampling interval (in microseconds) for the  and  functions. WidgetRattus integral x xs% computes the integral of the signal xs with the constant x. For example, if xs+ is the velocity of an object, the signal  integral 0 xs2 describes the distance travelled by that object. WidgetRattus4Compute the derivative of a signal. For example, if xs+ is the velocity of an object, the signal  derivative xs6 describes the acceleration travelled by that object.%%5 Safe-Inferred[ WidgetRattusSigF a is a signal of values of type a. In contrast to ,  supports the  and  functions. WidgetRattusF a will produces a value of type a) after zero or more ticks of some clocks WidgetRattus"Get the current value of a signal. WidgetRattusGet the future the signal. Safe-Inferred)*\y+  Safe-Inferred "#)*]22 !"#$$%&'()*+,-./0123456789:;<=>?@ABCDEF GHIJKLMNOPQRSTUVVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                       +&$+WidgetRattus-0.3-inplaceWidgetRattus.StrictWidgetRattus.InternalPrimitives WidgetRattusWidgetRattus.Plugin.AnnotationWidgetRattus.PluginWidgetRattus.ChannelsWidgetRattus.SignalWidgetRattus.FutureWidgetRattus.WidgetsWidgetRattus.DeriveWidgetRattus.Plugin.DependencyWidgetRattus.Plugin.UtilsWidgetRattus.Plugin.Strictify WidgetRattus.Plugin.StableSolverWidgetRattus.Plugin.SingleTickWidgetRattus.Plugin.ScopeCheckWidgetRattus.Plugin.PrimExprWidgetRattus.Plugin.Transform+WidgetRattus.Plugin.CheckClockCompatibilityWidgetRattus.Primitives"WidgetRattus.Widgets.InternalTypesbase GHC.IsListIsListfromList fromListNtoListItemChanContinuousData ContinuousprogressAndNextprogressInternal nextProgresspromoteInternalBoxStableSelectFstSndBothODelay InputValueOneInput MoreInputsClockInputChannelIdentifiersingletonClock emptyClock clockUnion channelMember inputInClock rattusErrordelay extractClockadv'advselectselect'neverboxunboxdefaultPromote promoteStoreprogressPromoteStoreMutexprogressPromoteStoreAtomicprogressPromoteStorepromote $fContinuousa continuous InternalAnn ExpectError ExpectWarning AllowLazyDataAllowRecursion$fDataInternalAnn$fShowInternalAnn$fEqInternalAnn$fOrdInternalAnn$fDataWidgetRattus$fShowWidgetRattus$fOrdWidgetRattus$fEqWidgetRattusplugin:*ListNil:!fst'snd'curry'uncurry'$fVectorSpace:*a$fEq:*$fShow:* $fFunctor:*$fContinuous:*Maybe'Just'Nothing' singletoninit'reverse' listToMaybe'+++map' concatMap'zip'zipWith' mapMaybe'isJust'union'unionBy'delete' deleteBy'nub'nubBy'filter' $fShowList$fEqList $fFunctorList$fFoldableList $fIsListList$fTraversableList$fContinuousList $fShowMaybe' $fEqMaybe' $fOrdMaybe'maybe' fromMaybe'toText readMaybe'splitOn'$fContinuousMaybe'CunCProducer getCurrentgetNextchandelayCwaittimer$fProducerBoxa $fProducerOa $fFunctorC$fApplicativeC$fMonadCmapOSig:::currentfuturemapmapAwaitmkSigmkBoxSigconstscanscanC scanAwait scanAwaitCscanMapjumpjumpingstopswitchswitchS switchAwaitswitchR interleave mapInterleave interleaveAllupdatezipWithzipWith3condzip triggerAwait triggerAwaitMtriggertriggerMbuffer bufferAwaitintegral derivative$fContinuousSig$fProducerSiga$fProducerSigMaybeaSigF:>:FNowWaitbindFmapFsyncsyncFmkSigFmkSigF'fromSigfilterMapAwait filterMap filterAwaitfilter zipWithAwait $fProducerFa$fProducerOneShota$fProducerSigFa TextField tfContenttfInputLabellabTextButton btnContentbtnClickSlidersldCurrsldEventsldMinsldMaxPopuppopCurrpopEventpopChild TextDropdowntddCurrtddEventtddListVStackHStackWidgetIsWidget mkWidgetNodemkWidget setEnabled DisplayabledisplayWidgets toWidgetListmkButton mkTextFieldmkLabelmkHStack mkConstHStackmkVStack mkConstVStackmkTextDropdownmkPopupmkSlider mkProgressBar btnOnClick btnOnClickSig setInputSigTF addInputSigTFtextFieldOnInputtextFieldOnInputSigrunApplication$fDisplayableInt$fDisplayableText $fWidgetsList $fWidgets:* $fWidgetswnewNamesabstractNewtypeQmkClassP normalCon tyVarBndrNameabstractNewtypeHasFVgetFVHasBV dependencygetBV printBindsghcStableTypesisStable isStableRec isStrictRec printMessageghcGHC.Types.ErrorSeverity SevIgnore SevWarningSevError isRattModuleadv'Var select'VarbigDelay inputValueVarextractClockVarunionVar isGhcModule getNameModuleisStrict isTemporal userFunctiontypeClassFunctiongetVar getMaybeVar getModuleFSisVarisTypemkSysLocalFromVarmkSysLocalFromExprfromRealSrcSpannoLocationInfomkAltgetAltsplitForAllTys'checkStrictDataSCxtsrcSpantcStable toSingleTick NotSupportedcheck checkBind ScopeBindScopeGetCtxtPrimHidden NoTickReason HiddenReasonRecDefLCtxtCtxtearlierhiddensrcLocrecDef stableTypes primAliasallowRecursion emptyCtxtsetCtxt modifyCtxtcheckAll System.Exit exitFailurecheckRecursiveBindsgetAllBVisStableConstrextractStableConstrcheckSCC stabilizegetScopeprimMapisPrim isPrimExpraddVars printMessage'printMessageCheckghc-prim GHC.TypesFalseAdvPrimInfoDelayAppAdvApp SelectAppBoxAppfunctionprim transform checkExpr CheckExprverbose recursiveSet allowRecExpoldExpr updateEnvstrictifyProgram GHC.MaybeMaybe text-2.0.2 Data.TextGHC.ListscanldtAppEventAppModel