module Data.Accessor.Monad.Trans.Example where import Data.Accessor.Basic ((.>), ) import Data.Accessor.Tuple (first, second, ) import Data.Accessor.Monad.Trans.State ((%=), (%:), ) import qualified Data.Accessor.Monad.Trans.State as AState import Control.Monad.Trans.State (State) import Prelude hiding (init) state :: State (Char,Int) Int state = do AState.set first 'a' AState.modify second succ AState.get second stateInfix :: State ((Char, Int), String) Int stateInfix = do str <- AState.get second first.>first %= 'a' first.>second %: succ first.>first %= 'b' second %= '!' : str AState.get (first.>second) stateLift :: State (Int, (Bool, Char)) () stateLift = do first %= 42 AState.lift second $ do first %: not second %= 'q'