summaryrefslogtreecommitdiff
path: root/events/src/Events/Types.hs
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2016-04-16 17:19:59 +0200
committerGregor Kleen <gkleen@yggdrasil.li>2016-04-16 17:19:59 +0200
commit8581ade929fafc68d1c3e5adde420071f3e0d949 (patch)
tree8f693987c66b2b67f5126d7383dae05f1c58519a /events/src/Events/Types.hs
parent63a5c8a5b9bfd5da317c240e16a979fb8e6dc5c6 (diff)
downloadevents-8581ade929fafc68d1c3e5adde420071f3e0d949.tar
events-8581ade929fafc68d1c3e5adde420071f3e0d949.tar.gz
events-8581ade929fafc68d1c3e5adde420071f3e0d949.tar.bz2
events-8581ade929fafc68d1c3e5adde420071f3e0d949.tar.xz
events-8581ade929fafc68d1c3e5adde420071f3e0d949.zip
Introduced some types
Diffstat (limited to 'events/src/Events/Types.hs')
-rw-r--r--events/src/Events/Types.hs59
1 files changed, 59 insertions, 0 deletions
diff --git a/events/src/Events/Types.hs b/events/src/Events/Types.hs
new file mode 100644
index 0000000..55e7a5a
--- /dev/null
+++ b/events/src/Events/Types.hs
@@ -0,0 +1,59 @@
1{-# LANGUAGE TemplateHaskell #-}
2
3module Events.Types
4 ( TimeRange(..), rangeStart, rangeDuration
5 , Event(..), payload, occursWithin
6 , SpecCtx(..), ctxVars
7 , Spec
8 , module Data.Aeson
9 , module Data.Time.Clock
10 , module Data.Default.Class
11 ) where
12
13import Control.Lens.TH
14
15import Data.Aeson (Object)
16
17import Data.Time.Clock
18
19import Control.Monad.Reader
20import ListT (ListT)
21import qualified ListT as ListT
22
23import Data.Default.Class
24
25import Data.Monoid
26import Control.Monad.Fix
27import Control.Lens
28import Data.Maybe
29
30data TimeRange = TimeRange
31 { _rangeStart :: UTCTime
32 , _rangeDuration :: NominalDiffTime
33 }
34makeLenses ''TimeRange
35
36data Event = Event
37 { _payload :: Object
38 , _occursWithin :: TimeRange -> Bool
39 }
40makeLenses ''Event
41
42data SpecCtx = SpecCtx
43 { _ctxVars :: Object
44 , _ctxEvents :: [Event]
45 }
46makeLenses ''SpecCtx
47
48instance Default SpecCtx where
49 def = SpecCtx
50 { _ctxVars = mempty
51 , _ctxEvents = mempty
52 }
53
54type Spec m a = ListT (ReaderT SpecCtx m) a
55
56interpret :: MonadFix m => Spec m (Maybe Event) -> m [Event]
57interpret x = catMaybes <$> mfix x'
58 where
59 x' = runReaderT (ListT.toList x) . flip (set ctxEvents) def . catMaybes