summaryrefslogtreecommitdiff
path: root/events/src/Events/Spec.hs
diff options
context:
space:
mode:
Diffstat (limited to 'events/src/Events/Spec.hs')
-rw-r--r--events/src/Events/Spec.hs36
1 files changed, 36 insertions, 0 deletions
diff --git a/events/src/Events/Spec.hs b/events/src/Events/Spec.hs
new file mode 100644
index 0000000..deabcc3
--- /dev/null
+++ b/events/src/Events/Spec.hs
@@ -0,0 +1,36 @@
1module Events.Spec
2 ( interpret
3 , Spec, Expr(..), BoolExpr(..)
4 ) where
5
6import Events.Types
7
8import Control.Monad.IO.Class
9import Control.Monad.State.Lazy
10
11import Data.Monoid
12import Data.Foldable
13import Control.Lens
14
15import Debug.Trace
16
17type Spec = [Expr] -- most significant last
18
19data Expr = Override Object
20 | Occurs BoolExpr
21 | Nop
22 deriving (Show)
23
24data BoolExpr = BoolLit Bool
25 deriving (Show)
26
27interpret :: MonadIO m => Spec -> Eval m ()
28interpret = mapM_ interpretExpr
29
30interpretExpr :: MonadIO m => Expr -> Eval m ()
31interpretExpr (Override obj) = ctxEvent ?= obj
32interpretExpr (Occurs expr) = ctxOccurs <~ interpretBoolExpr expr
33interpretExpr _ = return ()
34
35interpretBoolExpr :: Monad m => BoolExpr -> Eval m Bool
36interpretBoolExpr (BoolLit v) = return v