summaryrefslogtreecommitdiff
path: root/events/src/Events/Eval.hs
blob: c5bc134cc21869ece16e4d22c984b08a695b2737 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module Events.Eval
  ( evaluate
  ) where

import Control.Monad.Fix (MonadFix(mfix))

import Events.Types

import Data.Maybe (catMaybes)

import Control.Lens

evaluate :: MonadFix m => (Maybe Object -> StateT EvalCtx m Bool) -> Eval m () -> m [Object]
evaluate predicate x = catMaybes <$> mfix x'
  where
    x' = evalStateT (foldNDT predicate (preview objCtx <$> execStateT x def)) . flip (set ctxEvents) def . catMaybes