-- | -- 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