module Data.Label.MonadLib
       ( modM
       , setM
       , getM
       ) where

import Data.Label ((:->))
import MonadLib.Monads
import qualified Data.Label as L

modM :: StateM m f => (f :-> a) -> (a -> a) -> m ()
modM l f = liftM (L.modify l f) get >>= set

setM :: StateM m f => (f :-> a) -> a -> m ()
setM l a = liftM (L.set l a) get >>= set

getM :: StateM m f => (f :-> a) -> m a
getM l = liftM (L.get l) get