module Control.Monad.State.Extended ( module Control.Monad.State.Strict , liftState , whenS , unlessS ) where import Control.Monad.State.Strict liftState :: MonadState s m => State s a -> m a liftState = state . runState whenS :: MonadState s m => (s -> Bool) -> m () -> m () whenS predicate action = do condition <- fmap predicate get when condition action unlessS :: MonadState s m => (s -> Bool) -> m () -> m () unlessS predicate = whenS (not . predicate)