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 :: State (Char, Int) Int state = do forall (m :: * -> *) r a. Monad m => T r a -> a -> StateT r m () AState.set forall a b. T (a, b) a first Char 'a' forall (m :: * -> *) r a. Monad m => T r a -> (a -> a) -> StateT r m () AState.modify forall a b. T (a, b) b second forall a. Enum a => a -> a succ forall (m :: * -> *) r a. Monad m => T r a -> StateT r m a AState.get forall a b. T (a, b) b second stateInfix :: State ((Char, Int), String) Int stateInfix :: State ((Char, Int), String) Int stateInfix = do String str <- forall (m :: * -> *) r a. Monad m => T r a -> StateT r m a AState.get forall a b. T (a, b) b second forall a b. T (a, b) a firstforall a b c. T a b -> T b c -> T a c .>forall a b. T (a, b) a first forall (m :: * -> *) r a. Monad m => T r a -> a -> StateT r m () %= Char 'a' forall a b. T (a, b) a firstforall a b c. T a b -> T b c -> T a c .>forall a b. T (a, b) b second forall (m :: * -> *) r a. Monad m => T r a -> (a -> a) -> StateT r m () %: forall a. Enum a => a -> a succ forall a b. T (a, b) a firstforall a b c. T a b -> T b c -> T a c .>forall a b. T (a, b) a first forall (m :: * -> *) r a. Monad m => T r a -> a -> StateT r m () %= Char 'b' forall a b. T (a, b) b second forall (m :: * -> *) r a. Monad m => T r a -> a -> StateT r m () %= Char '!' forall a. a -> [a] -> [a] : String str forall (m :: * -> *) r a. Monad m => T r a -> StateT r m a AState.get (forall a b. T (a, b) a firstforall a b c. T a b -> T b c -> T a c .>forall a b. T (a, b) b second) stateLift :: State (Int, (Bool, Char)) () stateLift :: State (Int, (Bool, Char)) () stateLift = do forall a b. T (a, b) a first forall (m :: * -> *) r a. Monad m => T r a -> a -> StateT r m () %= Int 42 forall (m :: * -> *) r s a. Monad m => T r s -> State s a -> StateT r m a AState.lift forall a b. T (a, b) b second forall a b. (a -> b) -> a -> b $ do forall a b. T (a, b) a first forall (m :: * -> *) r a. Monad m => T r a -> (a -> a) -> StateT r m () %: Bool -> Bool not forall a b. T (a, b) b second forall (m :: * -> *) r a. Monad m => T r a -> a -> StateT r m () %= Char 'q'