úÎ! •l      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF G H I J K L M N O P QRSTUVWXYZ[\]^_`abcdef g h i j k  Safe2²RattusJUse this type to mark a Haskell function definition as a Rattus function: {-# ANN myFunction Rattus #-}>Or mark a whole module as consisting of Rattus functions only: {-# ANN module Rattus #-}”If you use the latter option, you can mark exceptions (i.e. functions that should be treated as ordinary Haskell function definitions) as follows:  {-# ANN myFunction NotRattus #-}òBy default all 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  F{-# ANN myFunction AllowLazyData #-} {-# ANN module AllowLazyData #-} None=>?-lRattus"Syntax that may contain variables.mRattusÚCompute 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.nRattusAComputes the variables that are bound by a given piece of syntax.oRattusfCompute the dependencies of a bag of bindings, returning a list of the strongly-connected components.npo None4M)qRattus!The set of stable built-in types.rRattus<Check whether the given type is stable. This check may use Stable constraints from the context.sRattus<Check whether the given type is stable. This check may use Stable constraints from the context.tRattus<Check whether the given type is stable. This check may use Stable constraints from the context.uvwxyz{|}~€‚rƒ„None"…Rattus8Transforms all functions into strict functions. If the † field of the ‡ argument is set to Truej, then this function also checks for use of non-strict data types and produces warnings if it finds any. ‡ˆ†‰…Š‹ŒNone#gŽRattus!Constraint solver plugin for the Stable type class.ŽNone &',=>?PSXjÀ(Rattus5This type class provides default implementations for  and ‘h for Haskell syntax that is not supported. These default implementations simply print an error message.’RattusThis is a variant of “* for syntax that can also bind variables.‘Rattus‘l checks whether its argument is scope-correct and in addition returns the the set of variables bound by it.“Rattus1This type class is implemented for each AST type aK for which we can check whether it adheres to the scoping rules of Rattus.RattusTCheck whether the argument is a scope correct piece of syntax in the given context.”RattusXThis constraint is used to pass along the context implicitly via an implicit parameter.•Rattus'The 4 primitive Rattus operations plus arr.–RattusjHidden context, containing variables that have fallen out of context along with the reason why they have.—Rattus2Indicates, why a variable has fallen out of scope.˜RattusWThe recursively defined variables + the position where the recursive definition starts™Rattus2A local context, consisting of a set of variables.šRattus&The current context for scope checking›RattuseVariables that are in scope now (i.e. occurring in the typing context but not to the left of a tick)œRattusDVariables that are in the typing context, but to the left of a tickRattushVariables that have fallen out of scope. The map contains the reason why they have fallen out of scope.žRattusSame as  but for recursive variables.ŸRattus!The current location information. RattusÿIf we are in the body of a recursively defined function, this field contains the variables that are defined recursively (could be more than one due to mutual recursion or because of a recursive pattern definition) and the location of the recursive definition.¡RattusType variables with a Stable constraint attached to them.¢RattusqA mapping from variables to the primitives that they are defined equal to. For example, a program could contain let mydel = delay in mydel 1, in which case mydel is mapped to £.¤Rattus,This flag indicates whether the context was ¤C (stripped of all non-stable stuff). It is set when typechecking box, arr and guarded recursion.¥RattusjThe starting context for checking a top-level definition. For non-recursive definitions, the argument is Nothingq. Otherwise, it contains the recursively defined variables along with the location of the recursive definition.¦Rattusset the current context.§Rattusmodify the current context.¨RattuslCheck all definitions in the given module. If Scope errors are found, the current execution is halted with ©.ªRattusÿOThis function checks whether a given top-level definition (either a single non-recursive definition or a group of mutual recursive definitions) is marked as Rattus code (via an annotation). In a group of mutual recursive definitions, the whole group is considered Rattus code if at least one of its constituents is marked as such.«Rattus’Check the scope of a list of (mutual) recursive bindings. The second argument is the set of variables defined by the (mutual) recursive bindings¬RattusACompute the set of variables defined by the given Haskell binder.­RattusŒThis is used when checking function definitions. If the context is not ticked, it stays the same. Otherwise, it is stabilized (similar to box).®Rattus@Checks whether the given type is a type constraint of the form Stable a for some type variable a-. In that case it returns the type variable a.¯Rattus Given a type (C1, ... Cn) => t4, this function returns the list of type variables  [a1,...,am]" for which there is a constraint  Stable ai among  C1, ... Cn.°Rattus†Checks a top-level definition group, which is either a single non-recursive definition or a group of (mutual) recursive definitions.±RattuslStabilizes the given context, i.e. remove all non-stable types and any tick. This is performed on checking box, arrh and guarded recursive definitions. To provide better error messages a reason has to be given as well.²Rattus<This function checks whether the given variable is in scope.³Rattus2A map from the syntax of a primitive of Rattus to •.´Rattus>Checks whether a given variable is in fact a Rattus primitive.µRattus@Checks whether a given expression is in fact a Rattus primitive.¶Rattus%Add variables to the current context.·Rattus*Print a message with the current location.¸Rattus3Print a message with the current location. Returns ¹, if the severity is | and otherwise 'True.¨None2ndRattusCUse this to enable Rattus' plugin, either by supplying the option -fplugin=Rattus.PluginL directly to GHC. or by including the following pragma in each source file: &{-# OPTIONS -fplugin=Rattus.Plugin #-}NoneƒRattus,The "stable" type modality. A value of type Box aB is a time-independent computation that produces a value of type a. Use   and   to construct and consume -types.Rattus+The "later" type modality. A value of type O a1 is a computation that produces a value of type a in the next time step. Use   and   to construct and consume -types.Rattus 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 (Str a -> Str b). But these types are not stable: [Int]) (because the list type is not strict),  Int -> Int!, (function type is not stable), O Int, Str Int. Rattus1This is the constructor for the "later" modality : 9 “ ' "¢ t :: × -------------------- “ "¢ delay t :: O × Rattus0This is the eliminator for the "later" modality : ; “ "¢ t :: O × --------------------- “ ' “' "¢ adv t :: × Rattus2This is the constructor for the "stable" modality : 8 “& "¢ t :: × -------------------- “ "¢ box t :: Box ×<where “& is obtained from “ by removing ' and any variables x :: ×, where × is not a stable type. Rattus2This is the eliminator for the "stable" modality : 5 “ "¢ t :: Box × ------------------ “ "¢ unbox t :: ×  None•« RattusVariant of the standard  type class with a different F method so that it can be implemented for signal functions in Rattus.Rattus?Lift a function to an arrow. It is here the definition of the  Q class differs from the standard one. The function to be lifted has to be boxed.RattusoSend the first component of the input through the argument arrow, and copy the rest unchanged to the output.RattusA mirror image of .UThe default definition may be overridden with a more efficient version if desired.RattusySplit the input between the two argument arrows and combine their output. Note that this is in general not a functor.RattusKFanout: send the input to both argument arrows and combine their output.UThe default definition may be overridden with a more efficient version if desired.Rattus;This combinator is subject to the same restrictions as the   primitive of Rattus. That is, ; “& "¢ t :: b -> c -------------------- “ "¢ arr t :: a b c<where “& is obtained from “ by removing ' and any variables x :: ×, where × is not a stable type.Rattus,The identity arrow, which plays the role of º in arrow notation.  Safe =?@AHUV¢ RattusStrict pair type.RattusStrict variant of ».RattusStrict list type.RattusReverse a list.RattusReturns  on an empty list or  a where a# is the first element of the list.RattusAppend two lists. Rattus A version of ¼` which can throw out elements. In particular, the function argument returns something of type  b. If this is 8, no element is added on to the result list. If it is  b, then b is included in the result list.!Rattus)takes a default value, a function, and a  value. If the  value is h, the function returns the default value. Otherwise, it applies the function to the value inside the  and returns the result."RattusFirst projection function.#RattusSecond projection function. !"# !"#228None§é)RattusApplicative operator for .*Rattus Variant of )) where the argument is of a stable type..+RattusApplicative operator for .,Rattus Variant of +) where the argument is of a stable type..-Rattus Variant of  ] for stable types that can be safely used nested in recursive definitions or in another box.  !"#)*+,- +,)*-NoneUVÃÇ.RattusStr a is a stream of values of type a.0Rattus+Get the first element (= head) of a stream.1RattusOGet the tail of a stream, i.e. the remainder after removing the first element.2Rattus-Apply a function to each element of a stream.3Rattus>Construct a stream that has the same given value at each step.4Rattus Variant of 3 that allows any type a% as argument as long as it is boxed.5RattusYConstruct a stream by repeatedly applying a function to a given start element. That is, unfold (box f) x will produce the stream x ::: f x ::: f (f x) ::: ...6RattusSimilar to Haskell's ½. Xscan (box f) x (v1 ::: v2 ::: v3 ::: ... ) == (x `f` v1) ::: ((x `f` v1) `f` v2) ::: ... Note: Unlike ½, 6 starts with x f v1, not x.7Rattus7 is a composition of 2 and 6: "scanMap f g x === map g . scan f x8Rattus8 is similar to 7 but takes two input streams.9Rattus Similar to  on Haskell lists.:Rattus Similar to  on Haskell lists.;Rattus;Filter out elements from a stream according to a predicate.<RattusUGiven a value a and a stream as, this function produces a stream that behaves like =Rattus Given a list  [a1, ..., an] of elements and a stream xsC this function constructs a stream that starts with the elements  a1, ..., an, and then proceeds as xsJ. In particular, this means that the ith element of the original stream xs< is the (i+n)th element of the new stream. In other words  shiftMany$ behaves like repeatedly applying shift for each element in the list. >RattusBCalculates an approximation of an integral of the stream of type Str a( (the y-axis), where the stream of type Str sR provides the distance between measurements (i.e. the distance along the y axis)../0123456789:;<=>20134<=678./9:5;>NoneÐ?RattusEvents are simply streams of s.@RattusCApply a function to the values of the event (every time it occurs).ARattusAn event that will never occur.BRattus switch s e will behave like s but switches to s'$ every time the event e occurs with some value s'@.CRattusLike B= but works on stream functions instead of streams. That is, switchTrans s e will behave like s but switches to s'$ every time the event e occurs with some value s'@.¾RattusHelper function for C.DRattus›Trigger an event as every time the given predicate turns true on the given stream. The value of the event is the same as that of the stream at that time.ERattus:Trigger an event every time the given function produces a  value.?@ABCDE@ABC?DE NoneUVã[ FRattus'An event may either occur now or later.IRattus?Apply a function to the value of the event (if it ever occurs).JRattusAn event that will never occur.KRattus switch s e will behave like s until the event e occurs with value s'", in which case it will behave as s'.¿RattusTurn a stream of Ss into an event. The event will occur whenever the stream has a value of the form Just' v , and the event then has value v.LRattusTurn a stream of Es into a stream of events. Each such event behaves as if created by ¿.MRattusLike K= but works on stream functions instead of streams. That is, switchTrans s e will behave like s until the event e occurs with value s'#, in which case it will behave as s'.ÀRattusHelper function for M.ÁRattusHelper function for N.ÂRattusHelper function for N.NRattus„Synchronise two events. The resulting event occurs after both events have occurred (coinciding with whichever event occurred last.ORattus˜Trigger an event as soon as the given predicate turns true on the given stream. The value of the event is the same as that of the stream at that time.PRattus:Trigger an event as soon as the given function produces a  value. FGHIJKLMNOP IJKMLFGHNOPNone+UVÆQRattus%Signal functions from inputs of type a to outputs of type b.RRattus#Run a signal function for one step.SRattus/The identity signal function that does nothing.TRattusCompose two signal functions.URattusDCompute the integral of a signal. The first argument is the offset.VRattus switch s f behaves like s composed with arr fst until s produces a value of the form Just' c> in the second component. From then on it behaves like $f c@.WRattus rSwitch s behaves like s2, but every time the second input is of the form Just' s' it will change behaviour to s'.XRattusConstant signal function.YRattus†The output at time zero is the first argument, and from that point on it behaves like the signal function passed as second argument.ZRattus^Insert a sample in the output, and from that point on, behave like the given signal function.aNote: The type of -:> is different from Yampa's: The second argument must be delayed (or boxed).[Rattus„The input at time zero is the first argument, and from that point on it behaves like the signal function passed as second argument.\Rattus9Apply a function to the first output value at time zero.]Rattus8Apply a function to the first input value at time zero.^Rattus'Override initial value of input signal.ÃRattus9Lift a function to a signal function (applied pointwise).RNote: The type of is different from Yampa's: The function argument must be boxed.ÄRattus/Apply a signal function to the first component.ÅRattus0Apply a signal function to the second component.ÆRattus'Apply two signal functions in parallel.ÇRattus9Apply two signal functions in parallel on the same input._Rattus9Loop with an initial value for the signal being fed back.Note: The type of loopPre+ is different from Yampa's as we need the O type here.`Rattus$Precomposition with a pure function.aRattus%Postcomposition with a pure function.bRattus<Precomposition with a pure function (right-to-left variant).cRattus=Postcomposition with a pure function (right-to-left variant). QRSTUVWXYZ[\]^_`abcQSTVWX_R^UYZ[\]`abc None=?HV afRattus*A state machine that takes inputs of type a and produces output of type b$. In addition to the output of type bJ the underlying function also returns the new state of the state machine.hRattus,Turn a stream function into a state machine.iRattusATurn a signal function into a state machine from inputs of type a/ and time (since last input) to output of type b.jRattus)Turns a lazy infinite list into a stream.kRattus)Turns a stream into a lazy infinite list.fghijkhikjfgÈ     !"#$%&'()**+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQFRSTUV W X Y F R S Z T [ U V\]^_PS`abcdefghijklmn o o p q r s t u v w x y z { |}~}~€}~}~‚}~ƒ}~„}~…}~† ‡ ˆ ‰ Š ‹ Œ Ž‘‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÆFÊËÌ Í Ì Î ÏÐÑÒÓÔÕ#Rattus-0.3.1-3qP7dROnMhZ3AF6SUNDorW Rattus.Yampa Rattus.PluginRattus.Primitives Rattus.Arrow Rattus.StrictRattus Rattus.Stream Rattus.Events Rattus.EventRattus.ToHaskellRattus.Plugin.AnnotationRattus.Plugin.DependencyRattus.Plugin.UtilsRattus.Plugin.StrictifyRattus.Plugin.StableSolverRattus.Plugin.ScopeCheck Control.ArrowArrowarrPreludezipWithzipbaseControl.Category>>> NotRattus AllowLazyDatapluginBoxOStabledelayadvboxunboxarrBoxfirstsecond***&&&returnA:*Maybe'Just'Nothing'ListNil:!reverse' listToMaybe'+++ mapMaybe'maybe'fst'snd' $fFunctorList$fFoldableList$fShow:* $fFunctor:*$fVectorSpace:*a<*><**|*||**box'Str:::hdtlmapconstconstBoxunfoldscanscanMapscanMap2filtershift shiftManyintegralEventsneverswitch switchTranstrigger triggerMapEventNowWaitwhenJustawaitSFstepSFidentitycomposerSwitchconstant-->-:>>---=>>=- initiallyloopPre^>>>>^<<^^<< $fArrowSF$fCategoryTYPESFTrans runTransducerrunSFtoStrfromStrHasFVgetFVHasBV dependencygetBVghcStableTypesisStable isStableRec isStrictRecghcErrUtilsSeverity SevOutputSevFatalSevInteractiveSevDumpSevInfo SevWarningSevErrorisType printMessage isRattModule isGhcModule getNameModule isTemporalisStrict userFunction strictifyExprcheckStrictDataSCxtsrcSpan isDelayApp isDelayVarisCase isTophandlertcStable NotSupportedcheck checkBind ScopeBindScopeGetCtxtPrimHidden HiddenReasonRecDefLCtxtCtxtcurrentearlierhidden hiddenRecsrcLocrecDef stableTypes primAliasDelay stabilized emptyCtxtsetCtxt modifyCtxtcheckAll System.Exit exitFailure filterBindscheckRecursiveBindsgetAllBVstabilizeLaterisStableConstrextractStableConstrcheckSCC stabilizegetScopeprimMapisPrim isPrimExpraddVars printMessage'printMessageCheckghc-prim GHC.TypesFalseGHC.Basereturn GHC.MaybeMaybeGHC.Listscanl switchTrans' firstJustawait1await2arrPrim firstPrim secondPrim parSplitPrim parFanOutPrim