{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedLists #-} import Events.Types import Events.Spec import qualified Data.Yaml as Yaml import qualified Data.ByteString.Char8 as CBS import Control.Lens import Control.Monad import Control.Monad.Trans import Data.Aeson.Lens import Debug.Trace import Data.Maybe (isJust) import qualified ListT import qualified Events.Types.NDT as NDT main :: IO () main = test $ do n <- lift $ NDT.fromFoldable ([1..] :: [Integer]) -- objOccurs .= (n <= 5) objOccurs .= (n >= 2) objPayload ?= [ ("num", Yaml.Number $ fromIntegral n) ] where test = CBS.putStr . Yaml.encode <=< evaluate predicate predicate :: Monad m => Maybe Yaml.Object -> m Bool predicate Nothing = return True predicate (Just obj) = return . maybe False (<= 5) . traceShowId $ obj ^. at "num" . asDouble