!46      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                 ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E 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 efghijklmnopqrstuvwxyz{|}~Safe=?@Am!/None_m"YronAn infix form of  with arguments flipped.   ! "#$%R&uwsxtvry`_^'()*=@+,-./0123>?4CDE56789:;AB<FGIJKLMNOPQSTHUVXWYZ[\]abcdefghijklmnopq{z|}~   ! "#$%R&uwsxtvry`_^'()*=@+,-./0123>?4CDE56789:;AB<FGIJKLMNOPQSTHUVXWYZ[\]abcdefghijklmnopq{z|}~0None,>m*   None_m,hronData block descriptor ron"Does the descriptor refer to an op  Nonem->Safe,m3q$ronA bounded semilattice.0Bounded semilattice laws are already defined by ) and %,, so we don't define an explicit class here.%ronA semilattice.EIt may be a join-semilattice, or meet-semilattice, it doesn't matter.#If it matters for you, use package lattices.In addition to (!, Semilattice defines these laws:  commutativity x <> y == y <> x idempotency x <> x == x$%%$Safe,EXm3)*++)*Nonem8zron adapter to +ron Variant of  with a more debuggable message.ronFApply parser and check it is applied successfully. Kinda opposite to .ronWParses a definite double, i.e. it is not an integer. For this, the double has either a L, and 'e'/'E' part or both.=3None@AMagkm@d >ron4& smart constructor dropping upper bitsOron3& smart constructor dropping upper bitsPron1& smart constructor dropping upper bitsQronP specialized for 7Rron0& smart constructor dropping upper bitsSronR specialized for 8Tron/& smart constructor dropping upper bitsUronT specialized for 9Vron.& smart constructor dropping upper bitsWronV specialized for :Xron." smart constructor checking domain2789:,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY24:;<=9876>3?@ABCDEFGHIJKLMN5O12PQ70RS8/TU9.VWXY:,-None_amNronBase64 alphabetron/Check if a character is in the Base64 alphabet.ron*Convert a Base64 letter to a number [0-63]ron;Convert a subset [0-F] of Base64 letters to a number [0-15]ron"Decode a blob from a Base64 stringron+Decode a 60-bit number from a Base64 stringron+Decode a 60-bit number from a Base32 stringron+Decode a 64-bit number from a Base64 stringron+Decode a 64-bit number from a Base32 stringron Encode a blob to a Base64 stringron0Convert a number from [0..63] to a single letterron0Convert a number from [0..15] to a single letterron)Encode a 60-bit number to a Base64 stringronCEncode a 60-bit number to a Base64 string, dropping trailing zeroesronCEncode a 64-bit number to a Base32 string, dropping trailing zeroesron)Encode a 64-bit number to a Base64 stringNone "#$%279Xgm[[ronUUID split in partsron)Universally unique identifier of anythingronUUID with all zero fieldsronSplit UUID into partsronBuild UUID from partsron'Build former 64 bits of UUID from partsron'Build latter 64 bits of UUID from partsron#Make an unscoped (unqualified) nameron$Contruct a UUID name in compile-timeronMake a scoped (qualified) nameronConvert UUID to a nameronUUID with all zero fieldsronIncrement field  of a UUIDron Encode a UUID to a Base32 stringron"Decode a UUID from a Base32 stringronRON-Text-encodingronname, max 10 Base64 lettersronscope, max 10 Base64 lettersron!local name, max 10 Base64 lettersron (scope, name) for a scoped name;  (name, "") for a global name None "$279X_dgkmfron)Object reference accompanied with a frameronReference to an objectronFrame containing only state chunks. Must contain one main object and any number of other objects that are part of the main one.ronType-tagged version of ronCReduced chunk representing an object state (i. e. high-level value)ron Op terminatorron Common frameron Common chunkronCommon reduced chunkronOpen op (operation)ronevent id (usually timestamp)ron;reference to other op; actual semantics depends on the typeronpayloadron Closed oprontyperon object idron7other keys and payload, that are common with reduced opronAtom  a payload element== None"#$_`mm  ronSerialize a frameronSerialize a chunkronSerialize a closed opronSerialize a reduced opron Serialize a ronEncode descriptorron(Prepend serialized bytes with descriptor ron Serialize an ronSerialize a float atomronSerialize a reduced chunk ronSerialize a string atomronbody      None "#PX_`am{ron for descriptorron for extended length field ron Parse frameron for frameron for chunk sequenceronClear upper bit of 9ron for a chunkronAssert that is such as expectedron for a sequence of reduced opsron? for closed op, returning the op's terminator along with the opron@ for reduced op, returning the op's terminator along with the opron! for closed op without terminatorron" for reduced op without terminatorron2 for an op key (type, object, event, or reference)ron for UUIDron" for a payload (sequence of atoms)ron for an atom ron Parse an ron for a float atomron for an integer atomron for an stringronParse a string atomronexpected input lengthronexpected input lengthronexpected input lengthronexpected input lengthronexpected input length    Nonem|    None "#$79_agmDronGet current replica idronGet sequential timestamps.Laws:  ) t <- getEvents n (t !! i) == head t + i  t1 <- 2 t2 <- 2 t2 >= t1 + 1 getEvents 0 == getEvents 1ron"Make local time not less than thisron1Epoch-based Lamport time event, specific case of .ron4Calendar-based Lamport time event, specific case of .ron'Generic Lamport time event. Cannot be !b because we can't compare different types of clocks. If you want comparable events, use specific .ronReplica identifierronReplica id assignment style ronEClock type is encoded in 2 higher bits of variety, value in uuidValue"ron +https://en.wikipedia.org/wiki/Logical_clock%ronMRFC 4122 epoch, hundreds of nanoseconds since 1582. Year range is 1582 5235.&ronCalendar format. See  (https://github.com/gritzko/ron/issues/191. Year range is 2010 2350. Precision is 100 ns.1ron variant for any UUID2ronGet a single event3ronGet a single event as UUID4ronGet event sequence as UUIDs7ron%Make a calendar timestamp from a date8ron4Make a calendar timestamp from a date and a day time9ronHMake a calendar timestamp from a date, a day time, and a second fraction:ronMake an ! replica id from arbitrary numberronnumber of needed timestamps7ron(date as (year, month [1..12], day [1..])8ron(date as (year, month [1..12], day [1..])ron%day time as (hours, minutes, seconds)9ron(date as (year, month [1..12], day [1..])ron%day time as (hours, minutes, seconds)ron/fraction of a second in hundreds of nanosecond, #!"$%&',()*+-./0123456789:,&',()*+-% #!"$1:65./2347890 NoneM_mUron+ReplicaSim inside Lamport clock simulation.Vron!Lamport clock simulation. Key is 3. Non-present value is equivalent to (0, initial).WronExecute network simulationUsage:  . runNetworkSimT $ do X r1 $ do actions... X r2 $ do actions... X r1 $ ... Each WX starts its own networks. One shouldn't use in one network events generated in another.UVWXVUWXNoneMmeronNReal epoch clock. Uses kind of global variable to ensure strict monotonicity.fronRun e$ action with explicit time variable.gronLike f6, but initialize time variable with current wall time.hronGet current time in %B format (with 100 ns resolution). Monotonicity is not guaranteed.ron?Convert unix time in hundreds of milliseconds to RFC 4122 time.iron?Convert unix time in hundreds of milliseconds to RFC 4122 time.jron.Decode date and time from UUID epoch timestampefghijkejkhifgNone "#%X_gmFqron.Serialize UUID without context (used for test)rron Serialize UUID in op key contextsron)Serialize UUID in op value (atom) contextronXXX Partial for lists!rron(same key in the previous op (default is )ron(previous key of the same op (default is )ronthissronpreviousronthisqrsqsrNone"#$_agmtronSerialize a common frameuron%Serialize a sequence of common framesronSerialize a common chunkronSerialize a reduced chunkvronSerialize a context-free raw opron5Serialize a raw op with compression in stream contextron9Serialize a reduced op with compression in stream contextwronSerialize a context-free atomron=Serialize an atom with compression for UUID in stream contextron9Serialize a float atom. If unambiguous, i.e. contains a L or an 'e'/'E' , the prefix  is skipped.ronNSerialize an integer atom. Since integers are always unambiguous, the prefix '=' is always skipped.xronSerialize a string atomron%Serialize a payload in stream contextyronSerialize a state framezronESerialize an object. Return object id that must be stored separately.ronenclosing objectronprevious UUID (default is )qtuvwxyzwzvyxqtuNone "#$_`admd{ronParse a common frameron%Returns a chunk and the last op in itron;Returns a chunk and the last op (converted to closed) in it|ron!Parse a sequence of common frames}ronParse a single context-free op~ron Parse a single context-free UUIDronParse a UUID in key positionron%Parse a UUID in value (atom) positionron Parse an atomronParse a string atomronReturn  and  chunkIsQueryronParse a state frameron Parse a state frame as an objectron)Extract object states from a common frameron(same key in the previous op (default is )ron(previous key of the same op (default is )ronprevious {|}~ }~{|Nonemtuyz{|{|zytu !"#$%&'#()#(*&+,-./01213456789:;<;=#(>1?@ABC&D#(EFGHI/JKLMNOPQ#RS#RT#RU#RVWXWYWZW[\]^_`#Ra#Rb#Rcdedfdgdhij#Rk#Rl_m_n#Roipiq#Rr#Rs#Rtuvwxyz{|}~4444LLLLLLLLLLLLLixxx111111;;;;;;&&&      #(#(#(#(#(#(#(#(#(#({| !"#$%$&$'$($)*+*,*-./.0.1.23434356767689:9;9<9=9>9?9@ABACADEFGHIJKLMNOPQRSTUVWXYYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                    ! ! " # $ % & & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ _ ` ` a a b b c d e f g h i j k l m n n o p q r s t u v w x y z { | } ~                                             VWYZX                            ! "#$%&'()*+,ron-0.9-3vRSvkBw59E3vYQ9Q1curT RON.Prelude RON.ErrorRON.Binary.TypesRON.SemilatticeRON.Util RON.Util.Word RON.Base64RON.UUID RON.TypesRON.Binary.SerializeRON.Binary.Parse RON.EventRON.Event.Simulation RON.EpochRON.Text.Serialize.UUIDRON.Text.SerializeRON.Text.ParseRON.Prelude.Writer Data.ZigZagAttoparsec.Extra RON.BinaryRON.TextbaseGHC.Base++GHC.Listfilterzip Data.Tuplefstsnd otherwisemap$ghc-primGHC.PrimcoerceGHC.Num- GHC.Classes==>=negate>>=>>fmapControl.Monad.FailfailGHC.Real fromIntegral realToFrac Control.Monadguard<>mempty<*>pure*>GHC.EnumBoundedEnumEqIntegralMonad Data.DataDataFunctorNumOrdGHC.ShowShowData.Typeable.InternalTypeable MonadFail Applicative Data.FoldableFoldable GHC.GenericsGeneric SemigroupMonoid GHC.TypesBoolCharDoubleIntGHC.IntInt8Int16Int32Int64 integer-gmpGHC.Integer.TypeInteger GHC.MaybeMaybeOrderingIOWordGHC.WordWord8Word16Word32Word64 Data.EitherEither CoercibleFalseNothingJustTrueLeftRightLTEQGTbytestring-0.10.8.2Data.ByteString.Internal ByteString Data.Functor<$><|>'hashable-1.3.0.0-1RsrIcitxVDKffGN1TuMlmData.Hashable.ClassHashable text-1.2.3.1Data.Text.InternalTextconst.id time-1.8.0.2 Data.Time.Clock.Internal.UTCTimeUTCTime GHC.UnicodetoLower3unordered-containers-0.2.10.0-b9YJCQLkMeLUf311RZkQDData.HashMap.BaseHashMapcontainers-0.6.0.1Data.Map.InternalMap<*String AlternativeData.BifunctorbimapData.List.NonEmptynonEmptyControl.Monad.IO.ClassliftIOMonadIOunless<=<>=>filterMData.Traversableforsequence sequenceAtraverseControl.ApplicativeoptionalData.Functor.IdentityIdentity Data.IORefatomicModifyIORef' GHC.IORef writeIORef readIORefnewIORefIORefGHC.IOevaluatethrowIOcatchFilePathGHC.Exception.Type Exceptionorandasumfor_ traverse_elemlengthnulltoListfoldl'foldrfoldMapfold Data.MonoidLast Data.OldListunwordsunlinessortOnsortBy genericLength partition intercalate isSuffixOf isPrefixOf Text.Read readMaybeeitherData.Ord comparingDown Data.ProxyProxytoUpper Data.Function&onvoid$><&>^^^%mod/roundmaxBoundminBoundfromEnumtoEnumpredsuccGHC.CharchrzipWithlookupspansplitAtdroptake takeWhile replicaterepeat Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybemaybeuncurrysubtract*+flipordwhen=<<sconcat<$liftA2manysome:|NonEmptyGHC.Err undefinederrorGHC.Stack.Types HasCallStack/=<=compare&&||not<>maxminhash+transformers-0.5.6.2-I9SzqoyagSNIbUNkJkeRZ3Control.Monad.Trans.Classlift MonadTrans mtl-2.2.2-DPcvGa47JlhLWatXOCoVpVControl.Monad.Writer.Classpasslistentellwriter MonadWriterControl.Monad.State.Classgetsmodify'putget MonadStateControl.Monad.Reader.Classreaderask MonadReaderControl.Monad.Error.Class liftEither catchError throwError MonadErrorControl.Monad.Trans.ExceptExceptT runExceptTControl.Monad.Trans.ReaderReaderT runReaderT Control.Monad.Trans.State.StrictStateT runStateTStaterunState evalState evalStateT execStateTControl.Monad.Trans.Writer.CPS execWriterT runWriterTWriterTfmapLfoldr1headMaylastDef maximumDef maximumMay maximumMayOnmaxOn minimumDef minimumMay minimumMayOnminOnnote replicateM2 replicateM3showwhenJust!!?:MonadEError errorContext liftMaybeliftEitherStringthrowErrorTextthrowErrorStringcorrect$fIsStringError$fExceptionError $fEqError $fShowErrorDesc DOpClosed DOpReduced DOpHeaderDOpQueryHeader DUuidReducer DUuidObjectDUuidOpDUuidRef DAtomUuidZipDUuidZipObject DUuidZipOp DUuidZipRef DAtomUuid DAtomInteger DAtomString DAtomFloatSizedescIsOp $fEnumDesc$fEqDesc $fShowDescBoundedSemilattice Semilattice$fSemilatticeMaybe$fSemilatticeSet$fSemilatticeMaxInstance ByteStringLSafeCastsafeCastWord60Word24Word12Word6W6Word4Word2B0000B11B10B01B00b00b01b10b11leastSignificant2b0000b0001b0010b0011b0100b0101b0110b0111b1000b1001b1010b1011b1100b1101b1110b1111leastSignificant4leastSignificant6ls6leastSignificant12ls12leastSignificant24ls24leastSignificant60ls60toWord60 word60add$fHashableWord60$fBoundedWord60$fSafeCastWord64Fixed$fSafeCastWord64Integer$fSafeCastWord60Word64$fSafeCastWord24Word32$fSafeCastWord24Word64$fSafeCastWord12Word64$fSafeCastWord8Word64$fSafeCastWord8Word32$fSafeCastWord6Word64$fSafeCastWord6Word60$fSafeCastWord6Word8$fSafeCastWord6Int$fSafeCastWord4Word8$fSafeCastWord4Word64$fSafeCastWord4Int$fSafeCastWord2Word64$fSafeCastWord2Word8$fSafeCastWord2Word4$fSafeCastWord2Int $fEqWord2 $fOrdWord2 $fShowWord2 $fEqWord4 $fOrdWord4 $fShowWord4 $fEqWord6 $fOrdWord6 $fShowWord6 $fEqWord12 $fOrdWord12 $fShowWord12 $fEqWord24 $fOrdWord24 $fShowWord24 $fEnumWord60 $fEqWord60 $fOrdWord60 $fShowWord60alphabetisLetter decodeLetter decodeLetter4decodedecode60decode60base32decode64decode64base32encode encodeLetter encodeLetter4encode60 encode60shortencode64base32shortencode64 UuidFields uuidVariety uuidValue uuidVariant uuidVersion uuidOriginUUIDZerosplitbuildbuildXbuildYmkNameliftName mkScopedNamegetNamezero succValue encodeBase32 decodeBase32 $fShowUUID $fDataUUID$fEqUUID $fGenericUUID$fHashableUUID $fOrdUUID$fEqUuidFields$fShowUuidFields OpPatternRegularDeleteUndeleteCreateAck AnnotationAnnotationDerived ObjectFrame$sel:uuid:ObjectFrame$sel:frame:ObjectFrame ObjectRef StateFrame StateChunkWireStateChunk$sel:stateType:WireStateChunk$sel:stateBody:WireStateChunkOpTermTClosedTReducedTHeaderTQuery WireFrame WireChunkClosedValueQueryWireReducedChunk$sel:wrcHeader:WireReducedChunk$sel:wrcBody:WireReducedChunkOp $sel:opId:Op $sel:refId:Op$sel:payload:OpPayloadClosedOp$sel:reducerId:ClosedOp$sel:objectId:ClosedOp$sel:op:ClosedOpAtomAFloatAIntegerAStringAUuid UndeletePDeletePAckPRegularPCreatePAnnotationDerivedP AnnotationP opPattern$fShowClosedOp$fShowObjectRef $fDataAtom$fEqAtom $fGenericAtom$fHashableAtom $fShowAtom$fDataOp$fEqOp $fGenericOp $fHashableOp$fShowOp$fDataClosedOp $fEqClosedOp$fGenericClosedOp$fDataWireReducedChunk$fEqWireReducedChunk$fGenericWireReducedChunk$fShowWireReducedChunk$fDataWireChunk $fEqWireChunk$fGenericWireChunk$fShowWireChunk $fEqOpTerm $fShowOpTerm$fEqWireStateChunk$fShowWireStateChunk $fEqObjectRef$fEqObjectFrame$fShowObjectFrame serialize serializeAtomserializeStringparse parseAtom parseString ReplicaClockgetPid getEventsadvance EpochEvent CalendarEventEvent ReplicaIdNaming TrieForked CryptoForked RecordForkedApplicationSpecific LocalTime TCalendarTLogicalTEpochTUnknown EpochTime CalendarTimemonthsdayshoursminutessecondsnanosecHundredsfromCalendarEventfromEpochEvent toEpochEvent advanceToUuidgetEvent getEventUuid getEventUuids encodeEvent decodeEventmkCalendarDatemkCalendarDateTimemkCalendarDateTimeNanoapplicationSpecific$fHashableNaming$fOrdCalendarEvent$fOrdEpochEvent$fReplicaClockWriterT$fReplicaClockStateT$fReplicaClockReaderT$fReplicaClockExceptT$fEqCalendarTime$fOrdCalendarTime$fShowCalendarTime $fEqLocalTime$fShowLocalTime$fBoundedNaming $fEnumNaming $fEqNaming $fShowNaming $fEqReplicaId$fShowReplicaId$fGenericReplicaId$fHashableReplicaId $fEqEvent $fShowEvent$fEqCalendarEvent$fShowCalendarEvent$fEqEpochEvent$fShowEpochEvent ReplicaSimT NetworkSimTrunNetworkSimTrunReplicaSimT$fMonadTransNetworkSimT$fMonadFailReplicaSimT$fReplicaClockReplicaSimT$fMonadTransReplicaSimT$fApplicativeNetworkSimT$fFunctorNetworkSimT$fMonadNetworkSimT$fMonadErrorNetworkSimT$fApplicativeReplicaSimT$fFunctorReplicaSimT$fMonadReplicaSimT$fMonadErrorReplicaSimT EpochClock runEpochClockrunEpochClockFromCurrentTimegetCurrentEpochTimelocalEpochTimeFromUnix$fReplicaClockEpochClock$fApplicativeEpochClock$fFunctorEpochClock$fMonadEpochClock$fMonadIOEpochClock serializeUuidserializeUuidKeyserializeUuidAtomserializeWireFrameserializeWireFramesserializeRawOpserializeStateFrameserializeObjectparseWireFrameparseWireFramesparseOp parseUuid parseUuidKey parseUuidAtomparseStateFrame parseObjectzzEncode zzDecode64takeL*attoparsec-0.13.2.3-AY0GQT4C3BJ5TgZd4biG4K#Data.Attoparsec.ByteString.Internal endOfInputExData.Attoparsec.Internal endOfInput isSuccessfuldefiniteDoubleData.Attoparsec.ByteString.Lazy eitherResult maybeResult parseTestResultFailDonematch parseOnly peekWord8' peekWord8notWord8word8anyWord8 notInClassinClass takeWhile1 runScannerscantakeLazyByteStringtakeByteStringtakeTill skipWhilestring satisfyWithskipsatisfyParserData.Attoparsec.CombinatorfeedeitherPcount skipMany1skipMany manyTill'manyTillsepBy1'sepBy1sepBy'sepBymany1'many1many'optionchoicetryatEndcompareResults parseOnlyL withInputSizelabel??char<+>serializeChunkserializeClosedOpserializeReducedOp encodeDescserializeWithDescserializeFloatserializeReducedChunk parseDescextendedLength parseFrame parseChunksleastSignificant31 parseChunk assertSizeparseReducedOpsparseDescAndClosedOpparseDescAndReducedOp parseClosedOp parseOpenOp parseOpKeyuuid parsePayloadatomfloatintegerepochTimeFromUnixminimumByLengthserializeClosedOpZipserializeReducedOpZipserializeAtomZipserializeFloatAtomserializeIntegerAtomserializePayloadpChunkwireStateChunkheader findObjects