{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
module Eventium.Store.Class
(
EventStoreReader (..),
EventStoreWriter (..),
VersionedEventStoreReader,
GlobalEventStoreReader,
VersionedEventStoreWriter,
StreamEvent (..),
VersionedStreamEvent,
GlobalStreamEvent,
ExpectedPosition (..),
EventWriteError (..),
runEventStoreReaderUsing,
runEventStoreWriterUsing,
module Eventium.Store.Queries,
serializedEventStoreReader,
serializedVersionedEventStoreReader,
serializedGlobalEventStoreReader,
serializedEventStoreWriter,
EventVersion (..),
SequenceNumber (..),
transactionalExpectedWriteHelper,
)
where
import Data.Aeson
import Data.Functor ((<&>))
import Data.Functor.Contravariant
import Data.Maybe (mapMaybe)
import Eventium.Serializer
import Eventium.Store.Queries
import Eventium.UUID
import Web.HttpApiData
import Web.PathPieces
newtype EventStoreReader key position m event = EventStoreReader {forall key position (m :: * -> *) event.
EventStoreReader key position m event
-> QueryRange key position -> m [event]
getEvents :: QueryRange key position -> m [event]}
instance (Functor m) => Functor (EventStoreReader key position m) where
fmap :: forall a b.
(a -> b)
-> EventStoreReader key position m a
-> EventStoreReader key position m b
fmap a -> b
f (EventStoreReader QueryRange key position -> m [a]
reader) = (QueryRange key position -> m [b])
-> EventStoreReader key position m b
forall key position (m :: * -> *) event.
(QueryRange key position -> m [event])
-> EventStoreReader key position m event
EventStoreReader ((QueryRange key position -> m [b])
-> EventStoreReader key position m b)
-> (QueryRange key position -> m [b])
-> EventStoreReader key position m b
forall a b. (a -> b) -> a -> b
$ ([a] -> [b]) -> m [a] -> m [b]
forall a b. (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((a -> b) -> [a] -> [b]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f) (m [a] -> m [b])
-> (QueryRange key position -> m [a])
-> QueryRange key position
-> m [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> QueryRange key position -> m [a]
reader
type VersionedEventStoreReader m event = EventStoreReader UUID EventVersion m (VersionedStreamEvent event)
type GlobalEventStoreReader m event = EventStoreReader () SequenceNumber m (GlobalStreamEvent event)
newtype EventStoreWriter key position m event
= EventStoreWriter {forall key position (m :: * -> *) event.
EventStoreWriter key position m event
-> key
-> ExpectedPosition position
-> [event]
-> m (Either (EventWriteError position) EventVersion)
storeEvents :: key -> ExpectedPosition position -> [event] -> m (Either (EventWriteError position) EventVersion)}
instance Contravariant (EventStoreWriter key position m) where
contramap :: forall a' a.
(a' -> a)
-> EventStoreWriter key position m a
-> EventStoreWriter key position m a'
contramap a' -> a
f (EventStoreWriter key
-> ExpectedPosition position
-> [a]
-> m (Either (EventWriteError position) EventVersion)
writer) = (key
-> ExpectedPosition position
-> [a']
-> m (Either (EventWriteError position) EventVersion))
-> EventStoreWriter key position m a'
forall key position (m :: * -> *) event.
(key
-> ExpectedPosition position
-> [event]
-> m (Either (EventWriteError position) EventVersion))
-> EventStoreWriter key position m event
EventStoreWriter ((key
-> ExpectedPosition position
-> [a']
-> m (Either (EventWriteError position) EventVersion))
-> EventStoreWriter key position m a')
-> (key
-> ExpectedPosition position
-> [a']
-> m (Either (EventWriteError position) EventVersion))
-> EventStoreWriter key position m a'
forall a b. (a -> b) -> a -> b
$ \key
vers ExpectedPosition position
uuid -> key
-> ExpectedPosition position
-> [a]
-> m (Either (EventWriteError position) EventVersion)
writer key
vers ExpectedPosition position
uuid ([a] -> m (Either (EventWriteError position) EventVersion))
-> ([a'] -> [a])
-> [a']
-> m (Either (EventWriteError position) EventVersion)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a' -> a) -> [a'] -> [a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a' -> a
f
type VersionedEventStoreWriter = EventStoreWriter UUID EventVersion
data StreamEvent key position event
= StreamEvent
{ forall key position event. StreamEvent key position event -> key
streamEventKey :: !key,
forall key position event.
StreamEvent key position event -> position
streamEventPosition :: !position,
forall key position event. StreamEvent key position event -> event
streamEventEvent :: !event
}
deriving (Int -> StreamEvent key position event -> ShowS
[StreamEvent key position event] -> ShowS
StreamEvent key position event -> String
(Int -> StreamEvent key position event -> ShowS)
-> (StreamEvent key position event -> String)
-> ([StreamEvent key position event] -> ShowS)
-> Show (StreamEvent key position event)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall key position event.
(Show key, Show position, Show event) =>
Int -> StreamEvent key position event -> ShowS
forall key position event.
(Show key, Show position, Show event) =>
[StreamEvent key position event] -> ShowS
forall key position event.
(Show key, Show position, Show event) =>
StreamEvent key position event -> String
$cshowsPrec :: forall key position event.
(Show key, Show position, Show event) =>
Int -> StreamEvent key position event -> ShowS
showsPrec :: Int -> StreamEvent key position event -> ShowS
$cshow :: forall key position event.
(Show key, Show position, Show event) =>
StreamEvent key position event -> String
show :: StreamEvent key position event -> String
$cshowList :: forall key position event.
(Show key, Show position, Show event) =>
[StreamEvent key position event] -> ShowS
showList :: [StreamEvent key position event] -> ShowS
Show, StreamEvent key position event
-> StreamEvent key position event -> Bool
(StreamEvent key position event
-> StreamEvent key position event -> Bool)
-> (StreamEvent key position event
-> StreamEvent key position event -> Bool)
-> Eq (StreamEvent key position event)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall key position event.
(Eq key, Eq position, Eq event) =>
StreamEvent key position event
-> StreamEvent key position event -> Bool
$c== :: forall key position event.
(Eq key, Eq position, Eq event) =>
StreamEvent key position event
-> StreamEvent key position event -> Bool
== :: StreamEvent key position event
-> StreamEvent key position event -> Bool
$c/= :: forall key position event.
(Eq key, Eq position, Eq event) =>
StreamEvent key position event
-> StreamEvent key position event -> Bool
/= :: StreamEvent key position event
-> StreamEvent key position event -> Bool
Eq, (forall a b.
(a -> b)
-> StreamEvent key position a -> StreamEvent key position b)
-> (forall a b.
a -> StreamEvent key position b -> StreamEvent key position a)
-> Functor (StreamEvent key position)
forall a b.
a -> StreamEvent key position b -> StreamEvent key position a
forall a b.
(a -> b)
-> StreamEvent key position a -> StreamEvent key position b
forall key position a b.
a -> StreamEvent key position b -> StreamEvent key position a
forall key position a b.
(a -> b)
-> StreamEvent key position a -> StreamEvent key position b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall key position a b.
(a -> b)
-> StreamEvent key position a -> StreamEvent key position b
fmap :: forall a b.
(a -> b)
-> StreamEvent key position a -> StreamEvent key position b
$c<$ :: forall key position a b.
a -> StreamEvent key position b -> StreamEvent key position a
<$ :: forall a b.
a -> StreamEvent key position b -> StreamEvent key position a
Functor, (forall m. Monoid m => StreamEvent key position m -> m)
-> (forall m a.
Monoid m =>
(a -> m) -> StreamEvent key position a -> m)
-> (forall m a.
Monoid m =>
(a -> m) -> StreamEvent key position a -> m)
-> (forall a b.
(a -> b -> b) -> b -> StreamEvent key position a -> b)
-> (forall a b.
(a -> b -> b) -> b -> StreamEvent key position a -> b)
-> (forall b a.
(b -> a -> b) -> b -> StreamEvent key position a -> b)
-> (forall b a.
(b -> a -> b) -> b -> StreamEvent key position a -> b)
-> (forall a. (a -> a -> a) -> StreamEvent key position a -> a)
-> (forall a. (a -> a -> a) -> StreamEvent key position a -> a)
-> (forall a. StreamEvent key position a -> [a])
-> (forall a. StreamEvent key position a -> Bool)
-> (forall a. StreamEvent key position a -> Int)
-> (forall a. Eq a => a -> StreamEvent key position a -> Bool)
-> (forall a. Ord a => StreamEvent key position a -> a)
-> (forall a. Ord a => StreamEvent key position a -> a)
-> (forall a. Num a => StreamEvent key position a -> a)
-> (forall a. Num a => StreamEvent key position a -> a)
-> Foldable (StreamEvent key position)
forall a. Eq a => a -> StreamEvent key position a -> Bool
forall a. Num a => StreamEvent key position a -> a
forall a. Ord a => StreamEvent key position a -> a
forall m. Monoid m => StreamEvent key position m -> m
forall a. StreamEvent key position a -> Bool
forall a. StreamEvent key position a -> Int
forall a. StreamEvent key position a -> [a]
forall a. (a -> a -> a) -> StreamEvent key position a -> a
forall m a. Monoid m => (a -> m) -> StreamEvent key position a -> m
forall b a. (b -> a -> b) -> b -> StreamEvent key position a -> b
forall a b. (a -> b -> b) -> b -> StreamEvent key position a -> b
forall key position a.
Eq a =>
a -> StreamEvent key position a -> Bool
forall key position a. Num a => StreamEvent key position a -> a
forall key position a. Ord a => StreamEvent key position a -> a
forall key position m. Monoid m => StreamEvent key position m -> m
forall key position a. StreamEvent key position a -> Bool
forall key position a. StreamEvent key position a -> Int
forall key position a. StreamEvent key position a -> [a]
forall key position a.
(a -> a -> a) -> StreamEvent key position a -> a
forall key position m a.
Monoid m =>
(a -> m) -> StreamEvent key position a -> m
forall key position b a.
(b -> a -> b) -> b -> StreamEvent key position a -> b
forall key position a b.
(a -> b -> b) -> b -> StreamEvent key position a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall key position m. Monoid m => StreamEvent key position m -> m
fold :: forall m. Monoid m => StreamEvent key position m -> m
$cfoldMap :: forall key position m a.
Monoid m =>
(a -> m) -> StreamEvent key position a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> StreamEvent key position a -> m
$cfoldMap' :: forall key position m a.
Monoid m =>
(a -> m) -> StreamEvent key position a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> StreamEvent key position a -> m
$cfoldr :: forall key position a b.
(a -> b -> b) -> b -> StreamEvent key position a -> b
foldr :: forall a b. (a -> b -> b) -> b -> StreamEvent key position a -> b
$cfoldr' :: forall key position a b.
(a -> b -> b) -> b -> StreamEvent key position a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> StreamEvent key position a -> b
$cfoldl :: forall key position b a.
(b -> a -> b) -> b -> StreamEvent key position a -> b
foldl :: forall b a. (b -> a -> b) -> b -> StreamEvent key position a -> b
$cfoldl' :: forall key position b a.
(b -> a -> b) -> b -> StreamEvent key position a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> StreamEvent key position a -> b
$cfoldr1 :: forall key position a.
(a -> a -> a) -> StreamEvent key position a -> a
foldr1 :: forall a. (a -> a -> a) -> StreamEvent key position a -> a
$cfoldl1 :: forall key position a.
(a -> a -> a) -> StreamEvent key position a -> a
foldl1 :: forall a. (a -> a -> a) -> StreamEvent key position a -> a
$ctoList :: forall key position a. StreamEvent key position a -> [a]
toList :: forall a. StreamEvent key position a -> [a]
$cnull :: forall key position a. StreamEvent key position a -> Bool
null :: forall a. StreamEvent key position a -> Bool
$clength :: forall key position a. StreamEvent key position a -> Int
length :: forall a. StreamEvent key position a -> Int
$celem :: forall key position a.
Eq a =>
a -> StreamEvent key position a -> Bool
elem :: forall a. Eq a => a -> StreamEvent key position a -> Bool
$cmaximum :: forall key position a. Ord a => StreamEvent key position a -> a
maximum :: forall a. Ord a => StreamEvent key position a -> a
$cminimum :: forall key position a. Ord a => StreamEvent key position a -> a
minimum :: forall a. Ord a => StreamEvent key position a -> a
$csum :: forall key position a. Num a => StreamEvent key position a -> a
sum :: forall a. Num a => StreamEvent key position a -> a
$cproduct :: forall key position a. Num a => StreamEvent key position a -> a
product :: forall a. Num a => StreamEvent key position a -> a
Foldable, Functor (StreamEvent key position)
Foldable (StreamEvent key position)
(Functor (StreamEvent key position),
Foldable (StreamEvent key position)) =>
(forall (f :: * -> *) a b.
Applicative f =>
(a -> f b)
-> StreamEvent key position a -> f (StreamEvent key position b))
-> (forall (f :: * -> *) a.
Applicative f =>
StreamEvent key position (f a) -> f (StreamEvent key position a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b)
-> StreamEvent key position a -> m (StreamEvent key position b))
-> (forall (m :: * -> *) a.
Monad m =>
StreamEvent key position (m a) -> m (StreamEvent key position a))
-> Traversable (StreamEvent key position)
forall key position. Functor (StreamEvent key position)
forall key position. Foldable (StreamEvent key position)
forall key position (m :: * -> *) a.
Monad m =>
StreamEvent key position (m a) -> m (StreamEvent key position a)
forall key position (f :: * -> *) a.
Applicative f =>
StreamEvent key position (f a) -> f (StreamEvent key position a)
forall key position (m :: * -> *) a b.
Monad m =>
(a -> m b)
-> StreamEvent key position a -> m (StreamEvent key position b)
forall key position (f :: * -> *) a b.
Applicative f =>
(a -> f b)
-> StreamEvent key position a -> f (StreamEvent key position b)
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a.
Monad m =>
StreamEvent key position (m a) -> m (StreamEvent key position a)
forall (f :: * -> *) a.
Applicative f =>
StreamEvent key position (f a) -> f (StreamEvent key position a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b)
-> StreamEvent key position a -> m (StreamEvent key position b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b)
-> StreamEvent key position a -> f (StreamEvent key position b)
$ctraverse :: forall key position (f :: * -> *) a b.
Applicative f =>
(a -> f b)
-> StreamEvent key position a -> f (StreamEvent key position b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b)
-> StreamEvent key position a -> f (StreamEvent key position b)
$csequenceA :: forall key position (f :: * -> *) a.
Applicative f =>
StreamEvent key position (f a) -> f (StreamEvent key position a)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
StreamEvent key position (f a) -> f (StreamEvent key position a)
$cmapM :: forall key position (m :: * -> *) a b.
Monad m =>
(a -> m b)
-> StreamEvent key position a -> m (StreamEvent key position b)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b)
-> StreamEvent key position a -> m (StreamEvent key position b)
$csequence :: forall key position (m :: * -> *) a.
Monad m =>
StreamEvent key position (m a) -> m (StreamEvent key position a)
sequence :: forall (m :: * -> *) a.
Monad m =>
StreamEvent key position (m a) -> m (StreamEvent key position a)
Traversable)
type VersionedStreamEvent event = StreamEvent UUID EventVersion event
type GlobalStreamEvent event = StreamEvent () SequenceNumber (VersionedStreamEvent event)
data ExpectedPosition position
=
AnyPosition
|
NoStream
|
StreamExists
|
ExactPosition position
deriving (Int -> ExpectedPosition position -> ShowS
[ExpectedPosition position] -> ShowS
ExpectedPosition position -> String
(Int -> ExpectedPosition position -> ShowS)
-> (ExpectedPosition position -> String)
-> ([ExpectedPosition position] -> ShowS)
-> Show (ExpectedPosition position)
forall position.
Show position =>
Int -> ExpectedPosition position -> ShowS
forall position.
Show position =>
[ExpectedPosition position] -> ShowS
forall position.
Show position =>
ExpectedPosition position -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall position.
Show position =>
Int -> ExpectedPosition position -> ShowS
showsPrec :: Int -> ExpectedPosition position -> ShowS
$cshow :: forall position.
Show position =>
ExpectedPosition position -> String
show :: ExpectedPosition position -> String
$cshowList :: forall position.
Show position =>
[ExpectedPosition position] -> ShowS
showList :: [ExpectedPosition position] -> ShowS
Show, ExpectedPosition position -> ExpectedPosition position -> Bool
(ExpectedPosition position -> ExpectedPosition position -> Bool)
-> (ExpectedPosition position -> ExpectedPosition position -> Bool)
-> Eq (ExpectedPosition position)
forall position.
Eq position =>
ExpectedPosition position -> ExpectedPosition position -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall position.
Eq position =>
ExpectedPosition position -> ExpectedPosition position -> Bool
== :: ExpectedPosition position -> ExpectedPosition position -> Bool
$c/= :: forall position.
Eq position =>
ExpectedPosition position -> ExpectedPosition position -> Bool
/= :: ExpectedPosition position -> ExpectedPosition position -> Bool
Eq)
newtype EventWriteError position
= EventStreamNotAtExpectedVersion position
deriving (Int -> EventWriteError position -> ShowS
[EventWriteError position] -> ShowS
EventWriteError position -> String
(Int -> EventWriteError position -> ShowS)
-> (EventWriteError position -> String)
-> ([EventWriteError position] -> ShowS)
-> Show (EventWriteError position)
forall position.
Show position =>
Int -> EventWriteError position -> ShowS
forall position.
Show position =>
[EventWriteError position] -> ShowS
forall position.
Show position =>
EventWriteError position -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall position.
Show position =>
Int -> EventWriteError position -> ShowS
showsPrec :: Int -> EventWriteError position -> ShowS
$cshow :: forall position.
Show position =>
EventWriteError position -> String
show :: EventWriteError position -> String
$cshowList :: forall position.
Show position =>
[EventWriteError position] -> ShowS
showList :: [EventWriteError position] -> ShowS
Show, EventWriteError position -> EventWriteError position -> Bool
(EventWriteError position -> EventWriteError position -> Bool)
-> (EventWriteError position -> EventWriteError position -> Bool)
-> Eq (EventWriteError position)
forall position.
Eq position =>
EventWriteError position -> EventWriteError position -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall position.
Eq position =>
EventWriteError position -> EventWriteError position -> Bool
== :: EventWriteError position -> EventWriteError position -> Bool
$c/= :: forall position.
Eq position =>
EventWriteError position -> EventWriteError position -> Bool
/= :: EventWriteError position -> EventWriteError position -> Bool
Eq)
transactionalExpectedWriteHelper ::
(Monad m, Ord position, Num position) =>
(key -> m position) ->
(key -> [event] -> m EventVersion) ->
key ->
ExpectedPosition position ->
[event] ->
m (Either (EventWriteError position) EventVersion)
transactionalExpectedWriteHelper :: forall (m :: * -> *) position key event.
(Monad m, Ord position, Num position) =>
(key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> ExpectedPosition position
-> [event]
-> m (Either (EventWriteError position) EventVersion)
transactionalExpectedWriteHelper key -> m position
getLatestVersion' key -> [event] -> m EventVersion
storeEvents' key
key ExpectedPosition position
expected =
ExpectedPosition position
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
forall {m :: * -> *} {position} {key} {event}.
(Monad m, Num position, Ord position) =>
ExpectedPosition position
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
go ExpectedPosition position
expected key -> m position
getLatestVersion' key -> [event] -> m EventVersion
storeEvents' key
key
where
go :: ExpectedPosition position
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
go ExpectedPosition position
AnyPosition = Maybe (position -> Bool)
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
forall (m :: * -> *) position key event.
Monad m =>
Maybe (position -> Bool)
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
transactionalExpectedWriteHelper' Maybe (position -> Bool)
forall a. Maybe a
Nothing
go ExpectedPosition position
NoStream = Maybe (position -> Bool)
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
forall (m :: * -> *) position key event.
Monad m =>
Maybe (position -> Bool)
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
transactionalExpectedWriteHelper' ((position -> Bool) -> Maybe (position -> Bool)
forall a. a -> Maybe a
Just ((position -> Bool) -> Maybe (position -> Bool))
-> (position -> Bool) -> Maybe (position -> Bool)
forall a b. (a -> b) -> a -> b
$ position -> position -> Bool
forall a. Eq a => a -> a -> Bool
(==) (-position
1))
go ExpectedPosition position
StreamExists = Maybe (position -> Bool)
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
forall (m :: * -> *) position key event.
Monad m =>
Maybe (position -> Bool)
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
transactionalExpectedWriteHelper' ((position -> Bool) -> Maybe (position -> Bool)
forall a. a -> Maybe a
Just (position -> position -> Bool
forall a. Ord a => a -> a -> Bool
> (-position
1)))
go (ExactPosition position
pos) = Maybe (position -> Bool)
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
forall (m :: * -> *) position key event.
Monad m =>
Maybe (position -> Bool)
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
transactionalExpectedWriteHelper' ((position -> Bool) -> Maybe (position -> Bool)
forall a. a -> Maybe a
Just ((position -> Bool) -> Maybe (position -> Bool))
-> (position -> Bool) -> Maybe (position -> Bool)
forall a b. (a -> b) -> a -> b
$ position -> position -> Bool
forall a. Eq a => a -> a -> Bool
(==) position
pos)
transactionalExpectedWriteHelper' ::
(Monad m) =>
Maybe (position -> Bool) ->
(key -> m position) ->
(key -> [event] -> m EventVersion) ->
key ->
[event] ->
m (Either (EventWriteError position) EventVersion)
transactionalExpectedWriteHelper' :: forall (m :: * -> *) position key event.
Monad m =>
Maybe (position -> Bool)
-> (key -> m position)
-> (key -> [event] -> m EventVersion)
-> key
-> [event]
-> m (Either (EventWriteError position) EventVersion)
transactionalExpectedWriteHelper' Maybe (position -> Bool)
Nothing key -> m position
_ key -> [event] -> m EventVersion
storeEvents' key
uuid [event]
events =
key -> [event] -> m EventVersion
storeEvents' key
uuid [event]
events m EventVersion
-> (EventVersion -> Either (EventWriteError position) EventVersion)
-> m (Either (EventWriteError position) EventVersion)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> EventVersion -> Either (EventWriteError position) EventVersion
forall a b. b -> Either a b
Right
transactionalExpectedWriteHelper' (Just position -> Bool
f) key -> m position
getLatestVersion' key -> [event] -> m EventVersion
storeEvents' key
uuid [event]
events = do
position
latestVersion <- key -> m position
getLatestVersion' key
uuid
if position -> Bool
f position
latestVersion
then key -> [event] -> m EventVersion
storeEvents' key
uuid [event]
events m EventVersion
-> (EventVersion -> Either (EventWriteError position) EventVersion)
-> m (Either (EventWriteError position) EventVersion)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> EventVersion -> Either (EventWriteError position) EventVersion
forall a b. b -> Either a b
Right
else Either (EventWriteError position) EventVersion
-> m (Either (EventWriteError position) EventVersion)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either (EventWriteError position) EventVersion
-> m (Either (EventWriteError position) EventVersion))
-> Either (EventWriteError position) EventVersion
-> m (Either (EventWriteError position) EventVersion)
forall a b. (a -> b) -> a -> b
$ EventWriteError position
-> Either (EventWriteError position) EventVersion
forall a b. a -> Either a b
Left (EventWriteError position
-> Either (EventWriteError position) EventVersion)
-> EventWriteError position
-> Either (EventWriteError position) EventVersion
forall a b. (a -> b) -> a -> b
$ position -> EventWriteError position
forall position. position -> EventWriteError position
EventStreamNotAtExpectedVersion position
latestVersion
runEventStoreReaderUsing ::
(Monad m, Monad mstore) =>
(forall a. mstore a -> m a) ->
EventStoreReader key position mstore event ->
EventStoreReader key position m event
runEventStoreReaderUsing :: forall (m :: * -> *) (mstore :: * -> *) key position event.
(Monad m, Monad mstore) =>
(forall a. mstore a -> m a)
-> EventStoreReader key position mstore event
-> EventStoreReader key position m event
runEventStoreReaderUsing forall a. mstore a -> m a
runStore (EventStoreReader QueryRange key position -> mstore [event]
f) = (QueryRange key position -> m [event])
-> EventStoreReader key position m event
forall key position (m :: * -> *) event.
(QueryRange key position -> m [event])
-> EventStoreReader key position m event
EventStoreReader (mstore [event] -> m [event]
forall a. mstore a -> m a
runStore (mstore [event] -> m [event])
-> (QueryRange key position -> mstore [event])
-> QueryRange key position
-> m [event]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QueryRange key position -> mstore [event]
f)
runEventStoreWriterUsing ::
(Monad m, Monad mstore) =>
(forall a. mstore a -> m a) ->
EventStoreWriter key posirion mstore event ->
EventStoreWriter key posirion m event
runEventStoreWriterUsing :: forall (m :: * -> *) (mstore :: * -> *) key posirion event.
(Monad m, Monad mstore) =>
(forall a. mstore a -> m a)
-> EventStoreWriter key posirion mstore event
-> EventStoreWriter key posirion m event
runEventStoreWriterUsing forall a. mstore a -> m a
runStore (EventStoreWriter key
-> ExpectedPosition posirion
-> [event]
-> mstore (Either (EventWriteError posirion) EventVersion)
f) =
(key
-> ExpectedPosition posirion
-> [event]
-> m (Either (EventWriteError posirion) EventVersion))
-> EventStoreWriter key posirion m event
forall key position (m :: * -> *) event.
(key
-> ExpectedPosition position
-> [event]
-> m (Either (EventWriteError position) EventVersion))
-> EventStoreWriter key position m event
EventStoreWriter ((key
-> ExpectedPosition posirion
-> [event]
-> m (Either (EventWriteError posirion) EventVersion))
-> EventStoreWriter key posirion m event)
-> (key
-> ExpectedPosition posirion
-> [event]
-> m (Either (EventWriteError posirion) EventVersion))
-> EventStoreWriter key posirion m event
forall a b. (a -> b) -> a -> b
$ \key
vers ExpectedPosition posirion
uuid [event]
events -> mstore (Either (EventWriteError posirion) EventVersion)
-> m (Either (EventWriteError posirion) EventVersion)
forall a. mstore a -> m a
runStore (mstore (Either (EventWriteError posirion) EventVersion)
-> m (Either (EventWriteError posirion) EventVersion))
-> mstore (Either (EventWriteError posirion) EventVersion)
-> m (Either (EventWriteError posirion) EventVersion)
forall a b. (a -> b) -> a -> b
$ key
-> ExpectedPosition posirion
-> [event]
-> mstore (Either (EventWriteError posirion) EventVersion)
f key
vers ExpectedPosition posirion
uuid [event]
events
serializedEventStoreReader ::
(Monad m) =>
Serializer event serialized ->
EventStoreReader key position m serialized ->
EventStoreReader key position m event
serializedEventStoreReader :: forall (m :: * -> *) event serialized key position.
Monad m =>
Serializer event serialized
-> EventStoreReader key position m serialized
-> EventStoreReader key position m event
serializedEventStoreReader Serializer {event -> serialized
serialized -> Maybe event
serialized -> Either String event
serialize :: event -> serialized
deserialize :: serialized -> Maybe event
deserializeEither :: serialized -> Either String event
serialize :: forall a b. Serializer a b -> a -> b
deserialize :: forall a b. Serializer a b -> b -> Maybe a
deserializeEither :: forall a b. Serializer a b -> b -> Either String a
..} (EventStoreReader QueryRange key position -> m [serialized]
reader) =
(QueryRange key position -> m [event])
-> EventStoreReader key position m event
forall key position (m :: * -> *) event.
(QueryRange key position -> m [event])
-> EventStoreReader key position m event
EventStoreReader ((QueryRange key position -> m [event])
-> EventStoreReader key position m event)
-> (QueryRange key position -> m [event])
-> EventStoreReader key position m event
forall a b. (a -> b) -> a -> b
$ ([serialized] -> [event]) -> m [serialized] -> m [event]
forall a b. (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((serialized -> Maybe event) -> [serialized] -> [event]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe serialized -> Maybe event
deserialize) (m [serialized] -> m [event])
-> (QueryRange key position -> m [serialized])
-> QueryRange key position
-> m [event]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QueryRange key position -> m [serialized]
reader
serializedVersionedEventStoreReader ::
(Monad m) =>
Serializer event serialized ->
VersionedEventStoreReader m serialized ->
VersionedEventStoreReader m event
serializedVersionedEventStoreReader :: forall (m :: * -> *) event serialized.
Monad m =>
Serializer event serialized
-> VersionedEventStoreReader m serialized
-> VersionedEventStoreReader m event
serializedVersionedEventStoreReader Serializer event serialized
serializer = Serializer
(VersionedStreamEvent event) (VersionedStreamEvent serialized)
-> EventStoreReader
UUID EventVersion m (VersionedStreamEvent serialized)
-> EventStoreReader
UUID EventVersion m (VersionedStreamEvent event)
forall (m :: * -> *) event serialized key position.
Monad m =>
Serializer event serialized
-> EventStoreReader key position m serialized
-> EventStoreReader key position m event
serializedEventStoreReader (Serializer event serialized
-> Serializer
(VersionedStreamEvent event) (VersionedStreamEvent serialized)
forall (t :: * -> *) a b.
Traversable t =>
Serializer a b -> Serializer (t a) (t b)
traverseSerializer Serializer event serialized
serializer)
serializedGlobalEventStoreReader ::
(Monad m) =>
Serializer event serialized ->
GlobalEventStoreReader m serialized ->
GlobalEventStoreReader m event
serializedGlobalEventStoreReader :: forall (m :: * -> *) event serialized.
Monad m =>
Serializer event serialized
-> GlobalEventStoreReader m serialized
-> GlobalEventStoreReader m event
serializedGlobalEventStoreReader Serializer event serialized
serializer = Serializer (GlobalStreamEvent event) (GlobalStreamEvent serialized)
-> EventStoreReader
() SequenceNumber m (GlobalStreamEvent serialized)
-> EventStoreReader () SequenceNumber m (GlobalStreamEvent event)
forall (m :: * -> *) event serialized key position.
Monad m =>
Serializer event serialized
-> EventStoreReader key position m serialized
-> EventStoreReader key position m event
serializedEventStoreReader (Serializer
(VersionedStreamEvent event) (VersionedStreamEvent serialized)
-> Serializer
(GlobalStreamEvent event) (GlobalStreamEvent serialized)
forall (t :: * -> *) a b.
Traversable t =>
Serializer a b -> Serializer (t a) (t b)
traverseSerializer (Serializer event serialized
-> Serializer
(VersionedStreamEvent event) (VersionedStreamEvent serialized)
forall (t :: * -> *) a b.
Traversable t =>
Serializer a b -> Serializer (t a) (t b)
traverseSerializer Serializer event serialized
serializer))
serializedEventStoreWriter ::
(Monad m) =>
Serializer event serialized ->
EventStoreWriter key position m serialized ->
EventStoreWriter key position m event
serializedEventStoreWriter :: forall (m :: * -> *) event serialized key position.
Monad m =>
Serializer event serialized
-> EventStoreWriter key position m serialized
-> EventStoreWriter key position m event
serializedEventStoreWriter Serializer {event -> serialized
serialized -> Maybe event
serialized -> Either String event
serialize :: forall a b. Serializer a b -> a -> b
deserialize :: forall a b. Serializer a b -> b -> Maybe a
deserializeEither :: forall a b. Serializer a b -> b -> Either String a
serialize :: event -> serialized
deserialize :: serialized -> Maybe event
deserializeEither :: serialized -> Either String event
..} = (event -> serialized)
-> EventStoreWriter key position m serialized
-> EventStoreWriter key position m event
forall a' a.
(a' -> a)
-> EventStoreWriter key position m a
-> EventStoreWriter key position m a'
forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap event -> serialized
serialize
newtype EventVersion = EventVersion {EventVersion -> Int
unEventVersion :: Int}
deriving (Int -> EventVersion -> ShowS
[EventVersion] -> ShowS
EventVersion -> String
(Int -> EventVersion -> ShowS)
-> (EventVersion -> String)
-> ([EventVersion] -> ShowS)
-> Show EventVersion
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EventVersion -> ShowS
showsPrec :: Int -> EventVersion -> ShowS
$cshow :: EventVersion -> String
show :: EventVersion -> String
$cshowList :: [EventVersion] -> ShowS
showList :: [EventVersion] -> ShowS
Show, ReadPrec [EventVersion]
ReadPrec EventVersion
Int -> ReadS EventVersion
ReadS [EventVersion]
(Int -> ReadS EventVersion)
-> ReadS [EventVersion]
-> ReadPrec EventVersion
-> ReadPrec [EventVersion]
-> Read EventVersion
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS EventVersion
readsPrec :: Int -> ReadS EventVersion
$creadList :: ReadS [EventVersion]
readList :: ReadS [EventVersion]
$creadPrec :: ReadPrec EventVersion
readPrec :: ReadPrec EventVersion
$creadListPrec :: ReadPrec [EventVersion]
readListPrec :: ReadPrec [EventVersion]
Read, Eq EventVersion
Eq EventVersion =>
(EventVersion -> EventVersion -> Ordering)
-> (EventVersion -> EventVersion -> Bool)
-> (EventVersion -> EventVersion -> Bool)
-> (EventVersion -> EventVersion -> Bool)
-> (EventVersion -> EventVersion -> Bool)
-> (EventVersion -> EventVersion -> EventVersion)
-> (EventVersion -> EventVersion -> EventVersion)
-> Ord EventVersion
EventVersion -> EventVersion -> Bool
EventVersion -> EventVersion -> Ordering
EventVersion -> EventVersion -> EventVersion
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: EventVersion -> EventVersion -> Ordering
compare :: EventVersion -> EventVersion -> Ordering
$c< :: EventVersion -> EventVersion -> Bool
< :: EventVersion -> EventVersion -> Bool
$c<= :: EventVersion -> EventVersion -> Bool
<= :: EventVersion -> EventVersion -> Bool
$c> :: EventVersion -> EventVersion -> Bool
> :: EventVersion -> EventVersion -> Bool
$c>= :: EventVersion -> EventVersion -> Bool
>= :: EventVersion -> EventVersion -> Bool
$cmax :: EventVersion -> EventVersion -> EventVersion
max :: EventVersion -> EventVersion -> EventVersion
$cmin :: EventVersion -> EventVersion -> EventVersion
min :: EventVersion -> EventVersion -> EventVersion
Ord, EventVersion -> EventVersion -> Bool
(EventVersion -> EventVersion -> Bool)
-> (EventVersion -> EventVersion -> Bool) -> Eq EventVersion
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EventVersion -> EventVersion -> Bool
== :: EventVersion -> EventVersion -> Bool
$c/= :: EventVersion -> EventVersion -> Bool
/= :: EventVersion -> EventVersion -> Bool
Eq, Int -> EventVersion
EventVersion -> Int
EventVersion -> [EventVersion]
EventVersion -> EventVersion
EventVersion -> EventVersion -> [EventVersion]
EventVersion -> EventVersion -> EventVersion -> [EventVersion]
(EventVersion -> EventVersion)
-> (EventVersion -> EventVersion)
-> (Int -> EventVersion)
-> (EventVersion -> Int)
-> (EventVersion -> [EventVersion])
-> (EventVersion -> EventVersion -> [EventVersion])
-> (EventVersion -> EventVersion -> [EventVersion])
-> (EventVersion -> EventVersion -> EventVersion -> [EventVersion])
-> Enum EventVersion
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: EventVersion -> EventVersion
succ :: EventVersion -> EventVersion
$cpred :: EventVersion -> EventVersion
pred :: EventVersion -> EventVersion
$ctoEnum :: Int -> EventVersion
toEnum :: Int -> EventVersion
$cfromEnum :: EventVersion -> Int
fromEnum :: EventVersion -> Int
$cenumFrom :: EventVersion -> [EventVersion]
enumFrom :: EventVersion -> [EventVersion]
$cenumFromThen :: EventVersion -> EventVersion -> [EventVersion]
enumFromThen :: EventVersion -> EventVersion -> [EventVersion]
$cenumFromTo :: EventVersion -> EventVersion -> [EventVersion]
enumFromTo :: EventVersion -> EventVersion -> [EventVersion]
$cenumFromThenTo :: EventVersion -> EventVersion -> EventVersion -> [EventVersion]
enumFromThenTo :: EventVersion -> EventVersion -> EventVersion -> [EventVersion]
Enum, Integer -> EventVersion
EventVersion -> EventVersion
EventVersion -> EventVersion -> EventVersion
(EventVersion -> EventVersion -> EventVersion)
-> (EventVersion -> EventVersion -> EventVersion)
-> (EventVersion -> EventVersion -> EventVersion)
-> (EventVersion -> EventVersion)
-> (EventVersion -> EventVersion)
-> (EventVersion -> EventVersion)
-> (Integer -> EventVersion)
-> Num EventVersion
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: EventVersion -> EventVersion -> EventVersion
+ :: EventVersion -> EventVersion -> EventVersion
$c- :: EventVersion -> EventVersion -> EventVersion
- :: EventVersion -> EventVersion -> EventVersion
$c* :: EventVersion -> EventVersion -> EventVersion
* :: EventVersion -> EventVersion -> EventVersion
$cnegate :: EventVersion -> EventVersion
negate :: EventVersion -> EventVersion
$cabs :: EventVersion -> EventVersion
abs :: EventVersion -> EventVersion
$csignum :: EventVersion -> EventVersion
signum :: EventVersion -> EventVersion
$cfromInteger :: Integer -> EventVersion
fromInteger :: Integer -> EventVersion
Num, Maybe EventVersion
Value -> Parser [EventVersion]
Value -> Parser EventVersion
(Value -> Parser EventVersion)
-> (Value -> Parser [EventVersion])
-> Maybe EventVersion
-> FromJSON EventVersion
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: Value -> Parser EventVersion
parseJSON :: Value -> Parser EventVersion
$cparseJSONList :: Value -> Parser [EventVersion]
parseJSONList :: Value -> Parser [EventVersion]
$comittedField :: Maybe EventVersion
omittedField :: Maybe EventVersion
FromJSON, [EventVersion] -> Value
[EventVersion] -> Encoding
EventVersion -> Bool
EventVersion -> Value
EventVersion -> Encoding
(EventVersion -> Value)
-> (EventVersion -> Encoding)
-> ([EventVersion] -> Value)
-> ([EventVersion] -> Encoding)
-> (EventVersion -> Bool)
-> ToJSON EventVersion
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: EventVersion -> Value
toJSON :: EventVersion -> Value
$ctoEncoding :: EventVersion -> Encoding
toEncoding :: EventVersion -> Encoding
$ctoJSONList :: [EventVersion] -> Value
toJSONList :: [EventVersion] -> Value
$ctoEncodingList :: [EventVersion] -> Encoding
toEncodingList :: [EventVersion] -> Encoding
$comitField :: EventVersion -> Bool
omitField :: EventVersion -> Bool
ToJSON)
newtype SequenceNumber = SequenceNumber {SequenceNumber -> Int
unSequenceNumber :: Int}
deriving
( Int -> SequenceNumber -> ShowS
[SequenceNumber] -> ShowS
SequenceNumber -> String
(Int -> SequenceNumber -> ShowS)
-> (SequenceNumber -> String)
-> ([SequenceNumber] -> ShowS)
-> Show SequenceNumber
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SequenceNumber -> ShowS
showsPrec :: Int -> SequenceNumber -> ShowS
$cshow :: SequenceNumber -> String
show :: SequenceNumber -> String
$cshowList :: [SequenceNumber] -> ShowS
showList :: [SequenceNumber] -> ShowS
Show,
ReadPrec [SequenceNumber]
ReadPrec SequenceNumber
Int -> ReadS SequenceNumber
ReadS [SequenceNumber]
(Int -> ReadS SequenceNumber)
-> ReadS [SequenceNumber]
-> ReadPrec SequenceNumber
-> ReadPrec [SequenceNumber]
-> Read SequenceNumber
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS SequenceNumber
readsPrec :: Int -> ReadS SequenceNumber
$creadList :: ReadS [SequenceNumber]
readList :: ReadS [SequenceNumber]
$creadPrec :: ReadPrec SequenceNumber
readPrec :: ReadPrec SequenceNumber
$creadListPrec :: ReadPrec [SequenceNumber]
readListPrec :: ReadPrec [SequenceNumber]
Read,
Eq SequenceNumber
Eq SequenceNumber =>
(SequenceNumber -> SequenceNumber -> Ordering)
-> (SequenceNumber -> SequenceNumber -> Bool)
-> (SequenceNumber -> SequenceNumber -> Bool)
-> (SequenceNumber -> SequenceNumber -> Bool)
-> (SequenceNumber -> SequenceNumber -> Bool)
-> (SequenceNumber -> SequenceNumber -> SequenceNumber)
-> (SequenceNumber -> SequenceNumber -> SequenceNumber)
-> Ord SequenceNumber
SequenceNumber -> SequenceNumber -> Bool
SequenceNumber -> SequenceNumber -> Ordering
SequenceNumber -> SequenceNumber -> SequenceNumber
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SequenceNumber -> SequenceNumber -> Ordering
compare :: SequenceNumber -> SequenceNumber -> Ordering
$c< :: SequenceNumber -> SequenceNumber -> Bool
< :: SequenceNumber -> SequenceNumber -> Bool
$c<= :: SequenceNumber -> SequenceNumber -> Bool
<= :: SequenceNumber -> SequenceNumber -> Bool
$c> :: SequenceNumber -> SequenceNumber -> Bool
> :: SequenceNumber -> SequenceNumber -> Bool
$c>= :: SequenceNumber -> SequenceNumber -> Bool
>= :: SequenceNumber -> SequenceNumber -> Bool
$cmax :: SequenceNumber -> SequenceNumber -> SequenceNumber
max :: SequenceNumber -> SequenceNumber -> SequenceNumber
$cmin :: SequenceNumber -> SequenceNumber -> SequenceNumber
min :: SequenceNumber -> SequenceNumber -> SequenceNumber
Ord,
SequenceNumber -> SequenceNumber -> Bool
(SequenceNumber -> SequenceNumber -> Bool)
-> (SequenceNumber -> SequenceNumber -> Bool) -> Eq SequenceNumber
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SequenceNumber -> SequenceNumber -> Bool
== :: SequenceNumber -> SequenceNumber -> Bool
$c/= :: SequenceNumber -> SequenceNumber -> Bool
/= :: SequenceNumber -> SequenceNumber -> Bool
Eq,
Int -> SequenceNumber
SequenceNumber -> Int
SequenceNumber -> [SequenceNumber]
SequenceNumber -> SequenceNumber
SequenceNumber -> SequenceNumber -> [SequenceNumber]
SequenceNumber
-> SequenceNumber -> SequenceNumber -> [SequenceNumber]
(SequenceNumber -> SequenceNumber)
-> (SequenceNumber -> SequenceNumber)
-> (Int -> SequenceNumber)
-> (SequenceNumber -> Int)
-> (SequenceNumber -> [SequenceNumber])
-> (SequenceNumber -> SequenceNumber -> [SequenceNumber])
-> (SequenceNumber -> SequenceNumber -> [SequenceNumber])
-> (SequenceNumber
-> SequenceNumber -> SequenceNumber -> [SequenceNumber])
-> Enum SequenceNumber
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: SequenceNumber -> SequenceNumber
succ :: SequenceNumber -> SequenceNumber
$cpred :: SequenceNumber -> SequenceNumber
pred :: SequenceNumber -> SequenceNumber
$ctoEnum :: Int -> SequenceNumber
toEnum :: Int -> SequenceNumber
$cfromEnum :: SequenceNumber -> Int
fromEnum :: SequenceNumber -> Int
$cenumFrom :: SequenceNumber -> [SequenceNumber]
enumFrom :: SequenceNumber -> [SequenceNumber]
$cenumFromThen :: SequenceNumber -> SequenceNumber -> [SequenceNumber]
enumFromThen :: SequenceNumber -> SequenceNumber -> [SequenceNumber]
$cenumFromTo :: SequenceNumber -> SequenceNumber -> [SequenceNumber]
enumFromTo :: SequenceNumber -> SequenceNumber -> [SequenceNumber]
$cenumFromThenTo :: SequenceNumber
-> SequenceNumber -> SequenceNumber -> [SequenceNumber]
enumFromThenTo :: SequenceNumber
-> SequenceNumber -> SequenceNumber -> [SequenceNumber]
Enum,
Integer -> SequenceNumber
SequenceNumber -> SequenceNumber
SequenceNumber -> SequenceNumber -> SequenceNumber
(SequenceNumber -> SequenceNumber -> SequenceNumber)
-> (SequenceNumber -> SequenceNumber -> SequenceNumber)
-> (SequenceNumber -> SequenceNumber -> SequenceNumber)
-> (SequenceNumber -> SequenceNumber)
-> (SequenceNumber -> SequenceNumber)
-> (SequenceNumber -> SequenceNumber)
-> (Integer -> SequenceNumber)
-> Num SequenceNumber
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: SequenceNumber -> SequenceNumber -> SequenceNumber
+ :: SequenceNumber -> SequenceNumber -> SequenceNumber
$c- :: SequenceNumber -> SequenceNumber -> SequenceNumber
- :: SequenceNumber -> SequenceNumber -> SequenceNumber
$c* :: SequenceNumber -> SequenceNumber -> SequenceNumber
* :: SequenceNumber -> SequenceNumber -> SequenceNumber
$cnegate :: SequenceNumber -> SequenceNumber
negate :: SequenceNumber -> SequenceNumber
$cabs :: SequenceNumber -> SequenceNumber
abs :: SequenceNumber -> SequenceNumber
$csignum :: SequenceNumber -> SequenceNumber
signum :: SequenceNumber -> SequenceNumber
$cfromInteger :: Integer -> SequenceNumber
fromInteger :: Integer -> SequenceNumber
Num,
Maybe SequenceNumber
Value -> Parser [SequenceNumber]
Value -> Parser SequenceNumber
(Value -> Parser SequenceNumber)
-> (Value -> Parser [SequenceNumber])
-> Maybe SequenceNumber
-> FromJSON SequenceNumber
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: Value -> Parser SequenceNumber
parseJSON :: Value -> Parser SequenceNumber
$cparseJSONList :: Value -> Parser [SequenceNumber]
parseJSONList :: Value -> Parser [SequenceNumber]
$comittedField :: Maybe SequenceNumber
omittedField :: Maybe SequenceNumber
FromJSON,
[SequenceNumber] -> Value
[SequenceNumber] -> Encoding
SequenceNumber -> Bool
SequenceNumber -> Value
SequenceNumber -> Encoding
(SequenceNumber -> Value)
-> (SequenceNumber -> Encoding)
-> ([SequenceNumber] -> Value)
-> ([SequenceNumber] -> Encoding)
-> (SequenceNumber -> Bool)
-> ToJSON SequenceNumber
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: SequenceNumber -> Value
toJSON :: SequenceNumber -> Value
$ctoEncoding :: SequenceNumber -> Encoding
toEncoding :: SequenceNumber -> Encoding
$ctoJSONList :: [SequenceNumber] -> Value
toJSONList :: [SequenceNumber] -> Value
$ctoEncodingList :: [SequenceNumber] -> Encoding
toEncodingList :: [SequenceNumber] -> Encoding
$comitField :: SequenceNumber -> Bool
omitField :: SequenceNumber -> Bool
ToJSON,
Text -> Maybe SequenceNumber
SequenceNumber -> Text
(Text -> Maybe SequenceNumber)
-> (SequenceNumber -> Text) -> PathPiece SequenceNumber
forall s. (Text -> Maybe s) -> (s -> Text) -> PathPiece s
$cfromPathPiece :: Text -> Maybe SequenceNumber
fromPathPiece :: Text -> Maybe SequenceNumber
$ctoPathPiece :: SequenceNumber -> Text
toPathPiece :: SequenceNumber -> Text
PathPiece,
SequenceNumber -> Text
SequenceNumber -> ByteString
SequenceNumber -> Builder
(SequenceNumber -> Text)
-> (SequenceNumber -> Builder)
-> (SequenceNumber -> ByteString)
-> (SequenceNumber -> Text)
-> (SequenceNumber -> Builder)
-> ToHttpApiData SequenceNumber
forall a.
(a -> Text)
-> (a -> Builder)
-> (a -> ByteString)
-> (a -> Text)
-> (a -> Builder)
-> ToHttpApiData a
$ctoUrlPiece :: SequenceNumber -> Text
toUrlPiece :: SequenceNumber -> Text
$ctoEncodedUrlPiece :: SequenceNumber -> Builder
toEncodedUrlPiece :: SequenceNumber -> Builder
$ctoHeader :: SequenceNumber -> ByteString
toHeader :: SequenceNumber -> ByteString
$ctoQueryParam :: SequenceNumber -> Text
toQueryParam :: SequenceNumber -> Text
$ctoEncodedQueryParam :: SequenceNumber -> Builder
toEncodedQueryParam :: SequenceNumber -> Builder
ToHttpApiData,
Text -> Either Text SequenceNumber
ByteString -> Either Text SequenceNumber
(Text -> Either Text SequenceNumber)
-> (ByteString -> Either Text SequenceNumber)
-> (Text -> Either Text SequenceNumber)
-> FromHttpApiData SequenceNumber
forall a.
(Text -> Either Text a)
-> (ByteString -> Either Text a)
-> (Text -> Either Text a)
-> FromHttpApiData a
$cparseUrlPiece :: Text -> Either Text SequenceNumber
parseUrlPiece :: Text -> Either Text SequenceNumber
$cparseHeader :: ByteString -> Either Text SequenceNumber
parseHeader :: ByteString -> Either Text SequenceNumber
$cparseQueryParam :: Text -> Either Text SequenceNumber
parseQueryParam :: Text -> Either Text SequenceNumber
FromHttpApiData
)