Îõ³h&¿ñÒ      !"#$%&'()*+,-./0123456789:;<=>?@ABCD E F G H I J K L M N O P Q  Safe-Inferredrec-def!A class indicating that the type a- is partially ordered and has a top element.rec-def!A class indicating that the type a0 is partially ordered and has a bottom element.rec-def+This (empty) class indicates that the type a¥ is partially ordered. The class is empty because we do not need any of the operations on runtime. Nevertheless the order better exists for the safety of this API.8This order may be unrelated to the total order given by R.rec-defAdds S0 as a least element to an existing partial orderrec-defOrdered by '(<=)f'rec-def Ordered by  rec-defArbitrary using the  False < True order rec-defThe dual order rec-def Bottom is S rec-def Bottom is 0 rec-def Bottom is T rec-def Bottom is Urec-defTop is Vrec-defBottom is the  of a Safe-InferredÜãïúrec-defA cell in a propagator networkrec-def&Creates a cell, given an initial valuerec-def#Reads the current value of the cellrec-defÕSets a new value calculated from the given action. The action is executed atomically.ÐIf the value has changed, all watchers are notified afterwards (not atomically).rec-defÀWatch a cell: If the value changes, the given action is executedrec-defÌWhenever the first cell changes, update the second, using the given functionrec-defÖWhenever any of the first two cells change, update the third, using the given functionrec-defØWhenever any of the cells in the list change, update the other, using the given function Safe-Inferredã  rec-defA newtype around  to denote that bottom is V and top is Urec-defA newtype around  to denote that bottom is U and top is Vrec-defÎA type for propagators for the two-point lattice, consisting of bottom and topWrec-def6Just act: Still bottom, run act (once!) when triggeredXrec-defDefinitely toprec-def'A new propagator, initialized at bottomrec-def$A new propagator, already set to toprec-def whenTop p act runs act if p is already top, or after setTop p is run rec-defSet a propagator to top.6If it was bottom before, runs the actions queued with Ï. It does so _after_ setting the propagator to top, so that cycles are broken.!rec-defp1 ! p2 chains propagators: If p1 becomes top, then so does p2."rec-defÂQueries the current state of the propagator. All related calls to setTop3 that have executed so far are taken into account.  !"  !" Safe-Inferred ÁÂÃÄÅÇÌÚ ½#rec-defáThe HasPropagator class is used to pick a propagator implementation for a particular value type.%rec-defôThe Propagator class defines some functions shared by different propagator implementations. This backs the generic Data.Recursive.R.Internal wrapper.&rec-def(The type of values inside the propagator#$%'(&%'(&#$ Safe-InferredãuYrec-defA / that is being evaluated/rec-defAn IO& action that is to be run at most once0rec-def Create a new / from an Z action.The Zñ action may return other thunks that should be forced together whenver this thunk is forced (in arbitrary order)1rec-def"A Thunk that that already is done.Equivalent to +do {t <- thunk (pure []); force t; pure t }2rec-defüForce the execution of the thunk. If it has been forced already, it will do nothing. Else it will run the action passed to 0Õ, force thunks returned by that action, and not return until all of them are forced./012/012 Safe-Inferred )*5ÂÌÚ³3rec-defA value of type R a is a aæ, but defined using only specific operations (which you will find in the corresponding module, e.g. Data.Recursive.Bool%), which allow recursive definitions. You can use 8 to extract the value.‰Do not use the extracted value in the definition of that value, this will loop just like a recursive definition with plain values would.4rec-defAny value of type a is also a value of type r a.5rec-defDefines a value of type R b# to be a function of the values of R a.ÏThe action passed it should declare that relation to the underlying propagator.The Prop a8 propagator must only be used for reading values _from_.6rec-defDefines a value of type R c# to be a function of the values of R a and R b.ÏThe action passed it should declare that relation to the underlying propagator.The Prop a and Prop b9 propagators must only be used for reading values _from_.7rec-defDefines a value of type R b- to be a function of the values of a list of R a values.ÏThe action passed it should declare that relation to the underlying propagator.The Prop a9 propagators must only be used for reading values _from_.8rec-defExtract the value from a R a3. This must not be used when _defining_ that value.9rec-defConvenience variant of 8 to also remove the [& newtype wrapper, mostly for use with Data.Recursive.DualBool.34567893894567 Safe-InferredÌÚY :rec-defgetR rEmpty === S.empty;rec-def,getR (rInsert n r1) === S.insert n (getR r1)<rec-def,getR (rDelete n r1) === S.delete n (getR r1)=rec-def:\(Fun _ p) -> getR (rFilter p r1) === S.filter p (getR r1)>rec-def3getR (rUnion r1 r2) === S.union (getR r1) (getR r2)?rec-def,getR (rUnions rs) === S.unions (map getR rs)@rec-defÁgetR (rIntersection r1 r2) === S.intersection (getR r1) (getR r2)Arec-def,getR (rMember n r1) === S.member n (getR r1)Brec-def6getRDual (rNotMember n r1) === S.notMember n (getR r1)Crec-def=getRDual (rDisjoint r1 r2) === S.disjoint (getR r1) (getR r2) 348:;<=>?@ABC 348:;<=>?@ABC Safe-Inferred™34893489  Safe-InferredÁÃÄÅï>Drec-defgetRDual rTrue == TrueErec-defgetRDual rFalse == FalseFrec-def5getRDual (r1 ||| r2) === (getRDual r1 || getRDual r2)Grec-def5getRDual (r1 &&& r2) === (getRDual r1 && getRDual r2)Hrec-def*getRDual (ror rs) === or (map getRDual rs)Irec-def,getRDual (rand rs) === and (map getRDual rs)Jrec-def$getRDual (rnot r1) === not (getR r1) 39DEFGHIJ 39DEFGHIJ  Safe-InferredïµKrec-defgetR rTrue == TrueLrec-defgetR rFalse == FalseMrec-def)getR (r1 &&& r2) === (getR r1 && getR r2)Nrec-def)getR (r1 ||| r2) === (getR r1 || getR r2)Orec-def$getR (rand rs) === and (map getR rs)Prec-def"getR (ror rs) === or (map getR rs)Qrec-def$getR (rnot r1) === not (getRDual r1) 38KLMNOPQ 38KLMNOPQ  Safe-InferredíÜ !"#$%&&''()*+,-./01 23456789:;<=>?@ABCDEFGHIJKL M N O P Q R S M N P O R Q STUVWXYZ[\T]^T]_`abT]cWdeæ"rec-def-0.1-7l1USLhJN2zBnWa5HNyAlM Data.POrderData.Recursive.Propagator.NaiveData.Recursive.Propagator.P2Data.Recursive.Propagator.ClassSystem.IO.RecThunkData.Recursive.SetData.Recursive.R.InternalData.Recursive.RData.Recursive.DualBoolData.Recursive.BoolSsubsetOfData.Recursive.ExamplesToptopBottombottomPOrder $fPOrderMaybe$fPOrderNatural $fPOrderSet $fPOrderBool $fPOrderDual $fBottomMaybe$fBottomNatural $fBottomSet $fBottomBool $fTopBool $fBottomDualPropnewPropreadPropsetProp watchProplift1lift2liftList PDualBoolPBoolP2newP2newTopP2whenTopsetTopimpliesisTop HasPropagator Propagator newConstProp$fPropagatorPDualBoolDual$fPropagatorPBoolBool$fPropagatorPropx$fHasPropagatorSet$fHasPropagatorDual$fHasPropagatorBoolThunkthunk doneThunkforceRmkRdefR1defR2defRListgetRgetRDualrEmptyrInsertrDeleterFilterrUnionrUnions rIntersectionrMember rNotMember rDisjointrTruerFalse|||&&&rorrandrnotghc-prim GHC.ClassesOrdbase GHC.MaybeNothingcontainers-0.6.5.1Data.Set.Internalempty GHC.TypesFalseTrue StillBottom SurelyTop KickedThunkIOData.Semigroup.InternalDual