!Dp      !"#$%&'()*+,-./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 bcdefghijklmnopqrstuvwxyz{|}~None_m!ronAn 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+ ronData block descriptorron"Does the descriptor refer to an op          Nonem,hSafe,m2ronA 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$%&&$%Nonem7ron 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? 9ron/& smart constructor dropping upper bitsJron.& smart constructor dropping upper bitsKron,& smart constructor dropping upper bitsLronK specialized for 7Mron+& smart constructor dropping upper bitsNronM specialized for 8Oron*& smart constructor dropping upper bitsPronO specialized for 9Qron)& smart constructor dropping upper bitsRronQ specialized for :Sron)" smart constructor checking domain2789:'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST2/567843219.:;<=>?@ABCDEFGHI0J,-KL7+MN8*OP9)QRST:'(None_amM}ronBase64 alphabet~ron/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 string}~}~None "#$%279XgmZronUUID 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"$279;MX_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 descriptorron Serialize an ronSerialize a float atomronSerialize a reduced chunkronSerialize a string atomronbody None "#PX_`amzron 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 string ronParse a string atomronexpected input lengthronexpected input lengthronexpected input lengthronexpected input lengthronexpected input length      Nonem{M   None "#$79_agm~ ronGet current replica idronGet sequential timestamps.Laws:  ) t <- getEvents n (t !! i) == head t + i  t1 <- / t2 <- / 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 styleronEClock type is encoded in 2 higher bits of variety, value in uuidValueron +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..ron variant for any UUID/ronGet a single event0ronGet a single event as UUID1ronGet event sequence as UUIDs4ron%Make a calendar timestamp from a date5ron4Make a calendar timestamp from a date and a day time6ronHMake a calendar timestamp from a date, a day time, and a second fraction7ronMake an ! replica id from arbitrary numberronnumber of needed timestamps4ron(date as (year, month [1..12], day [1..])5ron(date as (year, month [1..12], day [1..])ron%day time as (hours, minutes, seconds)6ron(date as (year, month [1..12], day [1..])ron%day time as (hours, minutes, seconds)ron/fraction of a second in hundreds of nanosecond,   !"#$)%&'(*+,-./01234567,#$)%&'(*" !  .732+,/01456- NoneM_m1Rron+ReplicaSim inside Lamport clock simulation.Sron!Lamport clock simulation. Key is 3. Non-present value is equivalent to (0, initial).TronExecute network simulationUsage:  . runNetworkSimT $ do U r1 $ do actions... U r2 $ do actions... U r1 $ ... Each TX starts its own networks. One shouldn't use in one network events generated in another.RSTUSRTUNoneMmbronNReal epoch clock. Uses kind of global variable to ensure strict monotonicity.cronRun b$ action with explicit time variable.dronLike c6, but initialize time variable with current wall time.eronGet 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.fron?Convert unix time in hundreds of milliseconds to RFC 4122 time.gron.Decode date and time from UUID epoch timestampbcdefghbghefcdNone "#%X_gmnron.Serialize UUID without context (used for test)oron Serialize UUID in op key contextpron)Serialize UUID in op value (atom) contextronXXX Partial for lists!oron(same key in the previous op (default is )ron(previous key of the same op (default is )ronthispronpreviousronthisnopnpoNone"#$_agm-qronSerialize a common framerron%Serialize a sequence of common framesronSerialize a common chunkronSerialize a reduced chunksronSerialize a context-free raw opron5Serialize a raw op with compression in stream contextron9Serialize a reduced op with compression in stream contexttronSerialize 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.uronSerialize a string atomron%Serialize a payload in stream contextvronSerialize a state framewronESerialize an object. Return object id that must be stored separately.ronenclosing objectronprevious UUID (default is )nqrstuvwtwsvunqrNone "#$_`admxronParse a common frameron%Returns a chunk and the last op in itron;Returns a chunk and the last op (converted to closed) in ityron!Parse a sequence of common frameszronParse a single context-free op{ron Parse a single context-free UUID|ronParse a UUID in key position}ron%Parse a UUID in value (atom) position~ron Parse an atomronParse a string atomronReturn  and  chunkIsQueryronParse a state frameron Parse a state frame as an objectron)Extract object states from a common frame|ron(same key in the previous op (default is )ron(previous key of the same op (default is )}ronprevious xyz{|}~ ~z{|}xyNonem,qrvwxyxywvqr !"#$%&"'("')%*+,-./01023456789:;:<"'=0>?@AB%C"'DEFGH.IJKLMNOP"QR"QS"QT"QUVWVXVYVZ[\]^_"Q`"Qa"Qbcdcecfcghi"Qj"Qk^l^m"Qnhohp"Qq"Qr"Qstuvwxyz{|}~3333KKKKKKKKKKKKKhwww000000::::::%%%    "' "'"'"'"'"'"'"'"'"'z{ !"#$%&%'%()*)+),)-././.012121345464748494:4;<=<>?@ABCDEFGHIJKLMNOPQRSSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyyz{|}~                                            ! " # $ % & ' ( ) * + , - . / 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 e f g h i j j k l m n o p q r s t u v w x y z { | } ~                                         RSUVT                             !"#$%&'(ron-0.10-LI3TNmISuEzHWdg6QK61Jk 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.Parse 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<>maxminhashtransformers-0.5.5.0Control.Monad.Trans.Classlift MonadTrans mtl-2.2.2Control.Monad.Writer.ClasstellControl.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 execStateT!Control.Monad.Trans.Writer.StrictWriterT runWriterTfmapLfoldr1headMaylastDef 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$fHashableObjectRef$fGenericObjectRef$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-1B7gC0zLqr66G1FATj1fee#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