Safe Haskell | None |
---|---|
Language | Haskell2010 |
RON.Event
Synopsis
- data CalendarTime = CalendarTime {}
- data CalendarEvent = CalendarEvent !CalendarTime !ReplicaId
- data EpochEvent = EpochEvent !EpochTime !ReplicaId
- type EpochTime = Word60
- data Event = Event !LocalTime !ReplicaId
- data LocalTime
- data Naming
- class Monad m => ReplicaClock m where
- data ReplicaId = ReplicaId !Naming !Word60
- advanceToUuid :: ReplicaClock clock => UUID -> clock ()
- applicationSpecific :: Word64 -> ReplicaId
- decodeEvent :: UUID -> Event
- encodeEvent :: Event -> UUID
- fromCalendarEvent :: CalendarEvent -> Event
- fromEpochEvent :: EpochEvent -> Event
- getEvent :: (HasCallStack, ReplicaClock m) => m EpochEvent
- getEventUuid :: ReplicaClock m => m UUID
- getEventUuids :: ReplicaClock m => Word60 -> m [UUID]
- mkCalendarDate :: (Word16, Word16, Word8) -> Maybe CalendarTime
- mkCalendarDateTime :: (Word16, Word16, Word8) -> (Word8, Word8, Word8) -> Maybe CalendarTime
- mkCalendarDateTimeNano :: (Word16, Word16, Word8) -> (Word8, Word8, Word8) -> Word32 -> Maybe CalendarTime
- toEpochEvent :: Event -> Maybe EpochEvent
Documentation
data CalendarTime Source #
Calendar format. See https://github.com/gritzko/ron/issues/19. Year range is 2010—2350. Precision is 100 ns.
Constructors
CalendarTime | |
Instances
Eq CalendarTime Source # | |
Defined in RON.Event | |
Ord CalendarTime Source # | |
Defined in RON.Event Methods compare :: CalendarTime -> CalendarTime -> Ordering # (<) :: CalendarTime -> CalendarTime -> Bool # (<=) :: CalendarTime -> CalendarTime -> Bool # (>) :: CalendarTime -> CalendarTime -> Bool # (>=) :: CalendarTime -> CalendarTime -> Bool # max :: CalendarTime -> CalendarTime -> CalendarTime # min :: CalendarTime -> CalendarTime -> CalendarTime # | |
Show CalendarTime Source # | |
Defined in RON.Event Methods showsPrec :: Int -> CalendarTime -> ShowS # show :: CalendarTime -> String # showList :: [CalendarTime] -> ShowS # |
data CalendarEvent Source #
Calendar-based Lamport time event, specific case of Event
.
Constructors
CalendarEvent !CalendarTime !ReplicaId |
Instances
Eq CalendarEvent Source # | |
Defined in RON.Event Methods (==) :: CalendarEvent -> CalendarEvent -> Bool # (/=) :: CalendarEvent -> CalendarEvent -> Bool # | |
Ord CalendarEvent Source # | |
Defined in RON.Event Methods compare :: CalendarEvent -> CalendarEvent -> Ordering # (<) :: CalendarEvent -> CalendarEvent -> Bool # (<=) :: CalendarEvent -> CalendarEvent -> Bool # (>) :: CalendarEvent -> CalendarEvent -> Bool # (>=) :: CalendarEvent -> CalendarEvent -> Bool # max :: CalendarEvent -> CalendarEvent -> CalendarEvent # min :: CalendarEvent -> CalendarEvent -> CalendarEvent # | |
Show CalendarEvent Source # | |
Defined in RON.Event Methods showsPrec :: Int -> CalendarEvent -> ShowS # show :: CalendarEvent -> String # showList :: [CalendarEvent] -> ShowS # |
data EpochEvent Source #
Epoch-based Lamport time event, specific case of Event
.
Constructors
EpochEvent !EpochTime !ReplicaId |
Instances
Eq EpochEvent Source # | |
Defined in RON.Event | |
Ord EpochEvent Source # | |
Defined in RON.Event Methods compare :: EpochEvent -> EpochEvent -> Ordering # (<) :: EpochEvent -> EpochEvent -> Bool # (<=) :: EpochEvent -> EpochEvent -> Bool # (>) :: EpochEvent -> EpochEvent -> Bool # (>=) :: EpochEvent -> EpochEvent -> Bool # max :: EpochEvent -> EpochEvent -> EpochEvent # min :: EpochEvent -> EpochEvent -> EpochEvent # | |
Show EpochEvent Source # | |
Defined in RON.Event Methods showsPrec :: Int -> EpochEvent -> ShowS # show :: EpochEvent -> String # showList :: [EpochEvent] -> ShowS # |
type EpochTime = Word60 Source #
RFC 4122 epoch, hundreds of nanoseconds since 1582. Year range is 1582—5235.
Generic Lamport time event.
Cannot be Ord
because we can't compare different types of clocks.
If you want comparable events, use specific EpochEvent
.
Clock type is encoded in 2 higher bits of variety, value in uuidValue
Replica id assignment style
Constructors
TrieForked | |
CryptoForked | |
RecordForked | |
ApplicationSpecific |
class Monad m => ReplicaClock m where Source #
Methods
getPid :: m ReplicaId Source #
Get current replica id
Arguments
:: EpochTime | number of needed timestamps |
-> m [EpochEvent] |
Get sequential timestamps.
Laws:
advance :: EpochTime -> m () Source #
Make local time not less than this
Instances
ReplicaClock EpochClock Source # | |
Defined in RON.Epoch Methods getPid :: EpochClock ReplicaId Source # getEvents :: EpochTime -> EpochClock [EpochEvent] Source # advance :: EpochTime -> EpochClock () Source # | |
Monad m => ReplicaClock (ReplicaSimT m) Source # | |
Defined in RON.Event.Simulation Methods getPid :: ReplicaSimT m ReplicaId Source # getEvents :: EpochTime -> ReplicaSimT m [EpochEvent] Source # advance :: EpochTime -> ReplicaSimT m () Source # | |
ReplicaClock m => ReplicaClock (ExceptT e m) Source # | |
ReplicaClock m => ReplicaClock (StateT s m) Source # | |
(Monoid s, ReplicaClock m) => ReplicaClock (WriterT s m) Source # | |
ReplicaClock m => ReplicaClock (ReaderT r m) Source # | |
Replica identifier
Instances
Eq ReplicaId Source # | |
Show ReplicaId Source # | |
Generic ReplicaId Source # | |
Hashable ReplicaId Source # | |
type Rep ReplicaId Source # | |
Defined in RON.Event type Rep ReplicaId = D1 (MetaData "ReplicaId" "RON.Event" "ron-0.10-LI3TNmISuEzHWdg6QK61Jk" False) (C1 (MetaCons "ReplicaId" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Naming) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Word60))) |
advanceToUuid :: ReplicaClock clock => UUID -> clock () Source #
advance
variant for any UUID
applicationSpecific :: Word64 -> ReplicaId Source #
Make an ApplicationSpecific
replica id from arbitrary number
decodeEvent :: UUID -> Event Source #
encodeEvent :: Event -> UUID Source #
fromEpochEvent :: EpochEvent -> Event Source #
getEvent :: (HasCallStack, ReplicaClock m) => m EpochEvent Source #
Get a single event
getEventUuid :: ReplicaClock m => m UUID Source #
Get a single event as UUID
getEventUuids :: ReplicaClock m => Word60 -> m [UUID] Source #
Get event sequence as UUIDs
Arguments
:: (Word16, Word16, Word8) | date as (year, month [1..12], day [1..]) |
-> Maybe CalendarTime |
Make a calendar timestamp from a date
Arguments
:: (Word16, Word16, Word8) | date as (year, month [1..12], day [1..]) |
-> (Word8, Word8, Word8) | day time as (hours, minutes, seconds) |
-> Maybe CalendarTime |
Make a calendar timestamp from a date and a day time
mkCalendarDateTimeNano Source #
Arguments
:: (Word16, Word16, Word8) | date as (year, month [1..12], day [1..]) |
-> (Word8, Word8, Word8) | day time as (hours, minutes, seconds) |
-> Word32 | fraction of a second in hundreds of nanosecond |
-> Maybe CalendarTime |
Make a calendar timestamp from a date, a day time, and a second fraction
toEpochEvent :: Event -> Maybe EpochEvent Source #