summaryrefslogtreecommitdiff
path: root/events/src/Events/Spec.hs
diff options
context:
space:
mode:
authorGregor Kleen <pngwjpgh@users.noreply.github.com>2016-07-31 00:23:23 +0200
committerGregor Kleen <pngwjpgh@users.noreply.github.com>2016-07-31 00:23:23 +0200
commitd22086666632b707aa210f20ecf10a8cd4e6d4fe (patch)
treedd561d380898dfb0a0e8fc6d98249c965c19c221 /events/src/Events/Spec.hs
parent41d0a0c8c3a66ce48756ad8c2ab0ea87933047c9 (diff)
downloadevents-d22086666632b707aa210f20ecf10a8cd4e6d4fe.tar
events-d22086666632b707aa210f20ecf10a8cd4e6d4fe.tar.gz
events-d22086666632b707aa210f20ecf10a8cd4e6d4fe.tar.bz2
events-d22086666632b707aa210f20ecf10a8cd4e6d4fe.tar.xz
events-d22086666632b707aa210f20ecf10a8cd4e6d4fe.zip
Lambda calculus for computing events at runtime
Diffstat (limited to 'events/src/Events/Spec.hs')
-rw-r--r--events/src/Events/Spec.hs18
1 files changed, 7 insertions, 11 deletions
diff --git a/events/src/Events/Spec.hs b/events/src/Events/Spec.hs
index 2af3446..e098886 100644
--- a/events/src/Events/Spec.hs
+++ b/events/src/Events/Spec.hs
@@ -1,11 +1,13 @@
1{-# LANGUAGE GADTs #-} 1{-# LANGUAGE GADTs, DataKinds, TypeOperators #-}
2 2
3module Events.Spec 3module Events.Spec
4 ( interpret 4 ( interpret
5 , Spec, Cmnd(..), Expr(..) 5 , Spec, Cmnd(..), Expr(..), Elem(..)
6 ) where 6 ) where
7 7
8import Events.Types 8import Events.Types
9import Events.Spec.Types
10import Events.Spec.Eval
9 11
10import Control.Monad ((<=<)) 12import Control.Monad ((<=<))
11import Control.Monad.IO.Class 13import Control.Monad.IO.Class
@@ -17,21 +19,15 @@ import Control.Lens
17 19
18import Debug.Trace 20import Debug.Trace
19 21
20type Spec = [Expr Cmnd] -- most significant last 22type Spec m = Expr (Eval m) '[] Cmnd -- most significant last
21 23
22data Cmnd = COverride Object 24data Cmnd = COverride Object
23 | COccurs Bool 25 | COccurs Bool
24 | CNop 26 | CNop
25 deriving (Show) 27 deriving (Show)
26 28
27data Expr a where 29interpret :: MonadIO m => Spec m -> Eval m ()
28 ELit :: a -> Expr a 30interpret = join . fmap interpretCmnd . evalExpr
29
30interpret :: MonadIO m => Spec -> Eval m ()
31interpret = mapM_ $ interpretCmnd <=< interpretExpr
32
33interpretExpr :: MonadIO m => Expr Cmnd -> m Cmnd
34interpretExpr (ELit a) = return a
35 31
36interpretCmnd :: MonadIO m => Cmnd -> Eval m () 32interpretCmnd :: MonadIO m => Cmnd -> Eval m ()
37interpretCmnd (COverride obj) = objPayload ?= obj 33interpretCmnd (COverride obj) = objPayload ?= obj