From 03f321adafd3ef7a169555703ebc8e03903a1450 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sat, 16 Apr 2016 22:16:41 +0200 Subject: Specifications to be evaluated --- events/src/Events/Spec.hs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 events/src/Events/Spec.hs (limited to 'events/src/Events') 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 @@ +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 -- cgit v1.2.3