spectacle-1.0.0: src/Language/Spectacle/Model/ModelTemporal.hs
-- |
--
-- @since 1.0.0
module Language.Spectacle.Model.ModelTemporal
( -- * Model Temporal Formulae
ModelTemporal (ModelTemporal),
modelTemporalName,
getModelTemporal,
-- ** Construction
fromTemporalSpec,
)
where
import Data.Map (Map)
import qualified Data.Map as Map
import Lens.Micro ((^.))
import Data.World (World, worldValues)
import Language.Spectacle.AST.Temporal (Temporal, runTemporal)
-- ---------------------------------------------------------------------------------------------------------------------
data ModelTemporal ctx = ModelTemporal
{ modelTemporalName :: String
, getModelTemporal :: World ctx -> World ctx -> Bool
}
fromTemporalSpec :: Map String (Temporal ctx Bool) -> [ModelTemporal ctx]
fromTemporalSpec = Map.foldrWithKey (\k v xs -> go k v : xs) []
where
go name formula =
let runner w0 w1 = runTemporal (w0 ^. worldValues) (w1 ^. worldValues) formula
in ModelTemporal name runner