blob: 1e7e1b40b86e9d9119108d3ff5aa5187e907e9a7 (
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) = objPayload ?= obj
interpretExpr (Occurs expr) = objOccurs <~ interpretBoolExpr expr
interpretExpr _ = return ()
interpretBoolExpr :: Monad m => BoolExpr -> Eval m Bool
interpretBoolExpr (BoolLit v) = return v
|