{-# LANGUAGE DeriveGeneric #-}
{-# OPTIONS_HADDOCK prune #-}
module Striot.FunctionalIoTtypes where
import Data.Store
import Data.Time (UTCTime)
import GHC.Generics (Generic)
data Event alpha = Event { forall alpha. Event alpha -> Maybe Timestamp
time :: Maybe Timestamp
, forall alpha. Event alpha -> Maybe alpha
value :: Maybe alpha}
deriving (Event alpha -> Event alpha -> Bool
(Event alpha -> Event alpha -> Bool)
-> (Event alpha -> Event alpha -> Bool) -> Eq (Event alpha)
forall alpha. Eq alpha => Event alpha -> Event alpha -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Event alpha -> Event alpha -> Bool
$c/= :: forall alpha. Eq alpha => Event alpha -> Event alpha -> Bool
== :: Event alpha -> Event alpha -> Bool
$c== :: forall alpha. Eq alpha => Event alpha -> Event alpha -> Bool
Eq, Eq (Event alpha)
Eq (Event alpha)
-> (Event alpha -> Event alpha -> Ordering)
-> (Event alpha -> Event alpha -> Bool)
-> (Event alpha -> Event alpha -> Bool)
-> (Event alpha -> Event alpha -> Bool)
-> (Event alpha -> Event alpha -> Bool)
-> (Event alpha -> Event alpha -> Event alpha)
-> (Event alpha -> Event alpha -> Event alpha)
-> Ord (Event alpha)
Event alpha -> Event alpha -> Bool
Event alpha -> Event alpha -> Ordering
Event alpha -> Event alpha -> Event alpha
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
forall {alpha}. Ord alpha => Eq (Event alpha)
forall alpha. Ord alpha => Event alpha -> Event alpha -> Bool
forall alpha. Ord alpha => Event alpha -> Event alpha -> Ordering
forall alpha.
Ord alpha =>
Event alpha -> Event alpha -> Event alpha
min :: Event alpha -> Event alpha -> Event alpha
$cmin :: forall alpha.
Ord alpha =>
Event alpha -> Event alpha -> Event alpha
max :: Event alpha -> Event alpha -> Event alpha
$cmax :: forall alpha.
Ord alpha =>
Event alpha -> Event alpha -> Event alpha
>= :: Event alpha -> Event alpha -> Bool
$c>= :: forall alpha. Ord alpha => Event alpha -> Event alpha -> Bool
> :: Event alpha -> Event alpha -> Bool
$c> :: forall alpha. Ord alpha => Event alpha -> Event alpha -> Bool
<= :: Event alpha -> Event alpha -> Bool
$c<= :: forall alpha. Ord alpha => Event alpha -> Event alpha -> Bool
< :: Event alpha -> Event alpha -> Bool
$c< :: forall alpha. Ord alpha => Event alpha -> Event alpha -> Bool
compare :: Event alpha -> Event alpha -> Ordering
$ccompare :: forall alpha. Ord alpha => Event alpha -> Event alpha -> Ordering
Ord, Int -> Event alpha -> ShowS
[Event alpha] -> ShowS
Event alpha -> String
(Int -> Event alpha -> ShowS)
-> (Event alpha -> String)
-> ([Event alpha] -> ShowS)
-> Show (Event alpha)
forall alpha. Show alpha => Int -> Event alpha -> ShowS
forall alpha. Show alpha => [Event alpha] -> ShowS
forall alpha. Show alpha => Event alpha -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Event alpha] -> ShowS
$cshowList :: forall alpha. Show alpha => [Event alpha] -> ShowS
show :: Event alpha -> String
$cshow :: forall alpha. Show alpha => Event alpha -> String
showsPrec :: Int -> Event alpha -> ShowS
$cshowsPrec :: forall alpha. Show alpha => Int -> Event alpha -> ShowS
Show, ReadPrec [Event alpha]
ReadPrec (Event alpha)
Int -> ReadS (Event alpha)
ReadS [Event alpha]
(Int -> ReadS (Event alpha))
-> ReadS [Event alpha]
-> ReadPrec (Event alpha)
-> ReadPrec [Event alpha]
-> Read (Event alpha)
forall alpha. Read alpha => ReadPrec [Event alpha]
forall alpha. Read alpha => ReadPrec (Event alpha)
forall alpha. Read alpha => Int -> ReadS (Event alpha)
forall alpha. Read alpha => ReadS [Event alpha]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Event alpha]
$creadListPrec :: forall alpha. Read alpha => ReadPrec [Event alpha]
readPrec :: ReadPrec (Event alpha)
$creadPrec :: forall alpha. Read alpha => ReadPrec (Event alpha)
readList :: ReadS [Event alpha]
$creadList :: forall alpha. Read alpha => ReadS [Event alpha]
readsPrec :: Int -> ReadS (Event alpha)
$creadsPrec :: forall alpha. Read alpha => Int -> ReadS (Event alpha)
Read, (forall x. Event alpha -> Rep (Event alpha) x)
-> (forall x. Rep (Event alpha) x -> Event alpha)
-> Generic (Event alpha)
forall x. Rep (Event alpha) x -> Event alpha
forall x. Event alpha -> Rep (Event alpha) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall alpha x. Rep (Event alpha) x -> Event alpha
forall alpha x. Event alpha -> Rep (Event alpha) x
$cto :: forall alpha x. Rep (Event alpha) x -> Event alpha
$cfrom :: forall alpha x. Event alpha -> Rep (Event alpha) x
Generic)
type Timestamp = UTCTime
type Stream alpha = [Event alpha]
instance (Store alpha) => Store (Event alpha)
dataEvent :: Event alpha -> Bool
dataEvent :: forall alpha. Event alpha -> Bool
dataEvent (Event Maybe Timestamp
t (Just alpha
v)) = Bool
True
dataEvent (Event Maybe Timestamp
t Maybe alpha
Nothing) = Bool
False
timedEvent :: Event alpha -> Bool
timedEvent :: forall alpha. Event alpha -> Bool
timedEvent (Event (Just Timestamp
t) Maybe alpha
v) = Bool
True
timedEvent (Event Maybe Timestamp
Nothing Maybe alpha
v) = Bool
False