diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2016-05-27 18:51:48 +0200 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2016-05-27 18:51:48 +0200 |
| commit | e04e707b1fb63b7857878e2d77c560abe3efd51b (patch) | |
| tree | 589638b4f9eeab4a4ed664d42940e2bfb7c7f727 | |
| parent | aed36a51b3942a3050ee8cf45424798f22354d73 (diff) | |
| download | events-e04e707b1fb63b7857878e2d77c560abe3efd51b.tar events-e04e707b1fb63b7857878e2d77c560abe3efd51b.tar.gz events-e04e707b1fb63b7857878e2d77c560abe3efd51b.tar.bz2 events-e04e707b1fb63b7857878e2d77c560abe3efd51b.tar.xz events-e04e707b1fb63b7857878e2d77c560abe3efd51b.zip | |
Dynamically compute commands
| -rw-r--r-- | events/src/Events/Spec.hs | 31 | ||||
| -rw-r--r-- | events/src/Main.hs | 15 |
2 files changed, 25 insertions, 21 deletions
diff --git a/events/src/Events/Spec.hs b/events/src/Events/Spec.hs index 1e7e1b4..2af3446 100644 --- a/events/src/Events/Spec.hs +++ b/events/src/Events/Spec.hs | |||
| @@ -1,10 +1,13 @@ | |||
| 1 | {-# LANGUAGE GADTs #-} | ||
| 2 | |||
| 1 | module Events.Spec | 3 | module Events.Spec |
| 2 | ( interpret | 4 | ( interpret |
| 3 | , Spec, Expr(..), BoolExpr(..) | 5 | , Spec, Cmnd(..), Expr(..) |
| 4 | ) where | 6 | ) where |
| 5 | 7 | ||
| 6 | import Events.Types | 8 | import Events.Types |
| 7 | 9 | ||
| 10 | import Control.Monad ((<=<)) | ||
| 8 | import Control.Monad.IO.Class | 11 | import Control.Monad.IO.Class |
| 9 | import Control.Monad.State.Lazy | 12 | import Control.Monad.State.Lazy |
| 10 | 13 | ||
| @@ -14,23 +17,23 @@ import Control.Lens | |||
| 14 | 17 | ||
| 15 | import Debug.Trace | 18 | import Debug.Trace |
| 16 | 19 | ||
| 17 | type Spec = [Expr] -- most significant last | 20 | type Spec = [Expr Cmnd] -- most significant last |
| 18 | 21 | ||
| 19 | data Expr = Override Object | 22 | data Cmnd = COverride Object |
| 20 | | Occurs BoolExpr | 23 | | COccurs Bool |
| 21 | | Nop | 24 | | CNop |
| 22 | deriving (Show) | 25 | deriving (Show) |
| 23 | 26 | ||
| 24 | data BoolExpr = BoolLit Bool | 27 | data Expr a where |
| 25 | deriving (Show) | 28 | ELit :: a -> Expr a |
| 26 | 29 | ||
| 27 | interpret :: MonadIO m => Spec -> Eval m () | 30 | interpret :: MonadIO m => Spec -> Eval m () |
| 28 | interpret = mapM_ interpretExpr | 31 | interpret = mapM_ $ interpretCmnd <=< interpretExpr |
| 29 | 32 | ||
| 30 | interpretExpr :: MonadIO m => Expr -> Eval m () | 33 | interpretExpr :: MonadIO m => Expr Cmnd -> m Cmnd |
| 31 | interpretExpr (Override obj) = objPayload ?= obj | 34 | interpretExpr (ELit a) = return a |
| 32 | interpretExpr (Occurs expr) = objOccurs <~ interpretBoolExpr expr | ||
| 33 | interpretExpr _ = return () | ||
| 34 | 35 | ||
| 35 | interpretBoolExpr :: Monad m => BoolExpr -> Eval m Bool | 36 | interpretCmnd :: MonadIO m => Cmnd -> Eval m () |
| 36 | interpretBoolExpr (BoolLit v) = return v | 37 | interpretCmnd (COverride obj) = objPayload ?= obj |
| 38 | interpretCmnd (COccurs b) = objOccurs .= b | ||
| 39 | interpretCmnd _ = return () | ||
diff --git a/events/src/Main.hs b/events/src/Main.hs index 0026a8a..0454f22 100644 --- a/events/src/Main.hs +++ b/events/src/Main.hs | |||
| @@ -18,10 +18,11 @@ import Debug.Trace | |||
| 18 | import qualified ListT | 18 | import qualified ListT |
| 19 | 19 | ||
| 20 | main :: IO () | 20 | main :: IO () |
| 21 | main = test $ [ Nop | 21 | -- main = test $ [ Nop |
| 22 | , Override [("blub", String "Haha!")] | 22 | -- , Override [("blub", String "Haha!")] |
| 23 | , Occurs (BoolLit True) | 23 | -- , Occurs True |
| 24 | , Occurs (BoolLit False) | 24 | -- , Occurs False |
| 25 | ] | 25 | -- ] |
| 26 | where | 26 | -- where |
| 27 | test = CBS.putStr . Yaml.encode <=< evaluate . interpret | 27 | -- test = CBS.putStr . Yaml.encode <=< evaluate . interpret |
| 28 | main = undefined | ||
