sub-state-0.0.0.1: src/Control/Monad/State/Sub.hs
{-# LANGUAGE
MultiParamTypeClasses
, FlexibleInstances
#-}
module Control.Monad.State.Sub where
import Data.Set.Class as Sets
import Control.Monad.State
import Control.Monad.Reader
-- | > lookup i =<< (putSingle x >> getTotal) ~ return (Just x)
class MonadSubState i a s m where
getTotal :: m s
putSingle :: a -> m ()
instance ( HasInsertWith i a s
, MonadState s m
, MonadReader i m
) => MonadSubState i a s m where
getTotal = get
putSingle x = do
i <- ask
s <- get
put $ insertWith i x s