blob: deabcc33560509c9b9151fbfc1909c2cb89f7961 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
module Events.Spec
( interpret
, Spec, Expr(..), BoolExpr(..)
) where
import Events.Types
import Control.Monad.IO.Class
import Control.Monad.State.Lazy
import Data.Monoid
import Data.Foldable
import Control.Lens
import Debug.Trace
type Spec = [Expr] -- most significant last
data Expr = Override Object
| Occurs BoolExpr
| Nop
deriving (Show)
data BoolExpr = BoolLit Bool
deriving (Show)
interpret :: MonadIO m => Spec -> Eval m ()
interpret = mapM_ interpretExpr
interpretExpr :: MonadIO m => Expr -> Eval m ()
interpretExpr (Override obj) = ctxEvent ?= obj
interpretExpr (Occurs expr) = ctxOccurs <~ interpretBoolExpr expr
interpretExpr _ = return ()
interpretBoolExpr :: Monad m => BoolExpr -> Eval m Bool
interpretBoolExpr (BoolLit v) = return v
|