{-# LANGUAGE RankNTypes #-} module Events.Spec ( interpret , Spec, Expr(..), Val(..), Bindable(..), Elem(..) , module Events.Spec.Parse , module Events.Spec.Eval ) where import Events.Spec.Types import Events.Spec.Eval import Events.Spec.Parse import Data.Conduit import Data.Text (Text) import qualified Data.Text as T import Control.Monad.Catch (MonadThrow) interpret :: Monad m => Sink (Spec m) (Eval m) () interpret = maybe (lift mzero) (const interpret <=< lift . evalExpr) =<< await