packages feed

ddci-core-0.2.0.1: DDCI/Core/State.hs

module DDCI.Core.State
        ( State(..)
        , Transform(..)
        , initState

        , Mode (..)
        , adjustMode)
where
import DDCI.Core.Mode
import DDCI.Core.Transform
import Data.Set                 (Set)
import qualified Data.Set       as Set


-- | Interpreter state.
data State
        = State
        { stateModes            :: Set Mode 
        , stateTransform        :: Transform }


-- | Adjust a mode setting in the state.
adjustMode 
        :: Bool         -- ^ Whether to enable or disable the mode.        
        -> Mode         -- ^ Mode to adjust.
        -> State
        -> State

adjustMode True mode state
        = state { stateModes    = Set.insert mode (stateModes state) }

adjustMode False mode state
        = state { stateModes    = Set.delete mode (stateModes state) }


-- | The initial state.
initState :: State
initState
        = State
        { stateModes            = Set.empty 
        , stateTransform        = None }