atom-1.0.13: Language/Atom/Common/ValidData.hs
-- |
-- Module: ValidData
-- Description: Capturing data that can either be valid or invalid
-- Copyright: (c) 2013 Tom Hawkins & Lee Pike
--
-- Capturing data that can either be valid or invalid.
module Language.Atom.Common.ValidData
( ValidData
, validData
, getValidData
, whenValid
, whenInvalid
) where
import Language.Atom.Expressions
import Language.Atom.Language
-- | 'ValidData' captures the data and its validity condition.
-- 'ValidData' is abstract to prevent rules from using invalid data.
data ValidData a = ValidData a (E Bool)
-- | Create 'ValidData' given the data and validity condition.
validData :: a -> E Bool -> ValidData a
validData = ValidData
-- | Get a valid data. Action is disabled if data is invalid.
getValidData :: ValidData a -> Atom a
getValidData (ValidData a v) = cond v >> return a
-- | Action enabled if 'ValidData' is valid.
whenValid :: ValidData a -> Atom ()
whenValid (ValidData _ v) = cond v
-- | Action enabled if 'ValidData' is not valid.
whenInvalid :: ValidData a -> Atom ()
whenInvalid (ValidData _ v) = cond $ not_ v