{-# OPTIONS_GHC -Wall #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE NoImplicitPrelude #-} module Control.Monad.State.Profunctor.IxState( IxStateT(..) , IxState , ixState , swap , module I ) where import Control.Applicative ( Applicative((<*>), pure), Alternative((<|>), empty) ) import Control.Arrow ( Arrow(arr, first), ArrowApply(..), ArrowChoice(left) ) import Control.Category ( Category(..) ) import Control.Lens ( Choice(..), Profunctor(dimap), view, iso, over, _Wrapped, Field1(_1), Field2(_2), Iso, Rewrapped, Wrapped(..) ) import Control.Monad ( Monad(return, (>>=)), Functor(..), (>=>) ) import Control.Monad.Cont ( MonadCont(..) ) import Control.Monad.Error.Class ( MonadError(..) ) import Control.Monad.Fix ( MonadFix(..) ) import Control.Monad.IO.Class ( MonadIO(..) ) import Control.Monad.Reader.Class ( MonadReader(..) ) import Control.Monad.State.Class ( MonadState(..) ) import Control.Monad.State.Profunctor.Class as I ( IxMonadState(iget, iput, istate), IxAlternative(..), IxAlt(..), IxMonad, IxBind(..), IxApplicative(..), IxApply(..), IxFunctor(..), IxMonadFix(..), IxMonadCont(..), IxBindTrans(..), IxMonadTrans(..) ) import Control.Monad.Writer.Class ( MonadWriter(writer, listen, pass) ) import Data.Either ( Either(Right, Left), either ) import Data.Functor.Alt ( Alt((<!>)) ) import Data.Functor.Apply ( Apply(liftF2, (<.>)) ) import Data.Functor.Bind ( Bind((>>-)), (->-) ) import Data.Functor.Identity as I ( Identity(..) ) import Data.Monoid ( (<>), Monoid(mempty) ) import Data.Profunctor as I ( Strong(..) ) import Data.Semigroup ( Semigroup ) import Data.Semigroupoid ( Semigroupoid(..) ) newtype IxStateT f t s a = IxStateT (s -> f (a, t)) type IxState t s a = IxStateT Identity t s a ixState :: Iso (IxState t s a) (IxState t' s' a') (s -> (a, t)) (s' -> (a', t')) ixState :: forall t s a t' s' a' (p :: * -> * -> *) (f :: * -> *). (Profunctor p, Functor f) => p (s -> (a, t)) (f (s' -> (a', t'))) -> p (IxState t s a) (f (IxState t' s' a')) ixState = (IxState t s a -> s -> (a, t)) -> ((s' -> (a', t')) -> IxState t' s' a') -> Iso (IxState t s a) (IxState t' s' a') (s -> (a, t)) (s' -> (a', t')) forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b iso (\(IxStateT s -> Identity (a, t) f) -> Identity (a, t) -> (a, t) forall a. Identity a -> a runIdentity (Identity (a, t) -> (a, t)) -> (s -> Identity (a, t)) -> s -> (a, t) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . s -> Identity (a, t) f) (\s' -> (a', t') f -> (s' -> Identity (a', t')) -> IxState t' s' a' forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT ((a', t') -> Identity (a', t') forall a. a -> Identity a Identity ((a', t') -> Identity (a', t')) -> (s' -> (a', t')) -> s' -> Identity (a', t') forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . s' -> (a', t') f)) swap :: (Functor f, Functor f') => Iso (IxStateT f t s a) (IxStateT f' t' s' a') (IxStateT f a s t) (IxStateT f' a' s' t') swap :: forall (f :: * -> *) (f' :: * -> *) t s a t' s' a'. (Functor f, Functor f') => Iso (IxStateT f t s a) (IxStateT f' t' s' a') (IxStateT f a s t) (IxStateT f' a' s' t') swap = (IxStateT f t s a -> IxStateT f a s t) -> (IxStateT f' a' s' t' -> IxStateT f' t' s' a') -> Iso (IxStateT f t s a) (IxStateT f' t' s' a') (IxStateT f a s t) (IxStateT f' a' s' t') forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b iso (ASetter (IxStateT f t s a) (IxStateT f a s t) (s -> f (a, t)) (s -> f (t, a)) -> ((s -> f (a, t)) -> s -> f (t, a)) -> IxStateT f t s a -> IxStateT f a s t forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f t s a) -> Identity (Unwrapped (IxStateT f a s t))) -> IxStateT f t s a -> Identity (IxStateT f a s t) ASetter (IxStateT f t s a) (IxStateT f a s t) (s -> f (a, t)) (s -> f (t, a)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f t s a) (IxStateT f a s t) (Unwrapped (IxStateT f t s a)) (Unwrapped (IxStateT f a s t)) _Wrapped (\s -> f (a, t) f s s -> ((a, t) -> (t, a)) -> f (a, t) -> f (t, a) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (\(a a, t t) -> (t t, a a)) (s -> f (a, t) f s s))) (ASetter (IxStateT f' a' s' t') (IxStateT f' t' s' a') (s' -> f' (t', a')) (s' -> f' (a', t')) -> ((s' -> f' (t', a')) -> s' -> f' (a', t')) -> IxStateT f' a' s' t' -> IxStateT f' t' s' a' forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f' a' s' t') -> Identity (Unwrapped (IxStateT f' t' s' a'))) -> IxStateT f' a' s' t' -> Identity (IxStateT f' t' s' a') ASetter (IxStateT f' a' s' t') (IxStateT f' t' s' a') (s' -> f' (t', a')) (s' -> f' (a', t')) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f' a' s' t') (IxStateT f' t' s' a') (Unwrapped (IxStateT f' a' s' t')) (Unwrapped (IxStateT f' t' s' a')) _Wrapped (\s' -> f' (t', a') f s' s -> ((t', a') -> (a', t')) -> f' (t', a') -> f' (a', t') forall a b. (a -> b) -> f' a -> f' b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (\(t' t, a' a) -> (a' a, t' t)) (s' -> f' (t', a') f s' s))) instance IxStateT f t s a ~ x => Rewrapped (IxStateT f' t' s' a') x instance Wrapped (IxStateT f t s a) where type Unwrapped (IxStateT f t s a) = s -> f (a, t) _Wrapped' :: Iso' (IxStateT f t s a) (Unwrapped (IxStateT f t s a)) _Wrapped' = (IxStateT f t s a -> s -> f (a, t)) -> ((s -> f (a, t)) -> IxStateT f t s a) -> Iso (IxStateT f t s a) (IxStateT f t s a) (s -> f (a, t)) (s -> f (a, t)) forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b iso (\(IxStateT s -> f (a, t) x) -> s -> f (a, t) x) (s -> f (a, t)) -> IxStateT f t s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT instance (Apply f, Semigroup a, Semigroup t) => Semigroup (IxStateT f t s a) where IxStateT s -> f (a, t) f <> :: IxStateT f t s a -> IxStateT f t s a -> IxStateT f t s a <> IxStateT s -> f (a, t) g = (s -> f (a, t)) -> IxStateT f t s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s s -> ((a, t) -> (a, t) -> (a, t)) -> f (a, t) -> f (a, t) -> f (a, t) forall a b c. (a -> b -> c) -> f a -> f b -> f c forall (f :: * -> *) a b c. Apply f => (a -> b -> c) -> f a -> f b -> f c liftF2 (a, t) -> (a, t) -> (a, t) forall a. Semigroup a => a -> a -> a (<>) (s -> f (a, t) f s s) (s -> f (a, t) g s s)) instance (Applicative f, Apply f, Monoid a, Monoid t) => Monoid (IxStateT f t s a) where mempty :: IxStateT f t s a mempty = (s -> f (a, t)) -> IxStateT f t s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (f (a, t) -> s -> f (a, t) forall a. a -> s -> a forall (f :: * -> *) a. Applicative f => a -> f a pure ((a, t) -> f (a, t) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (a forall a. Monoid a => a mempty, t forall a. Monoid a => a mempty))) instance Functor f => Functor (IxStateT f t s) where fmap :: forall a b. (a -> b) -> IxStateT f t s a -> IxStateT f t s b fmap = (a -> b) -> IxStateT f t s a -> IxStateT f t s b forall a b j k. (a -> b) -> IxStateT f j k a -> IxStateT f j k b forall (f :: * -> * -> * -> *) a b j k. IxFunctor f => (a -> b) -> f j k a -> f j k b ($.$) instance Functor f => IxFunctor (IxStateT f) where a -> b f $.$ :: forall a b j k. (a -> b) -> IxStateT f j k a -> IxStateT f j k b $.$ IxStateT k -> f (a, j) g = (k -> f (b, j)) -> IxStateT f j k b forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (((a, j) -> (b, j)) -> f (a, j) -> f (b, j) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (ASetter (a, j) (b, j) a b -> (a -> b) -> (a, j) -> (b, j) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over ASetter (a, j) (b, j) a b forall s t a b. Field1 s t a b => Lens s t a b Lens (a, j) (b, j) a b _1 a -> b f) (f (a, j) -> f (b, j)) -> (k -> f (a, j)) -> k -> f (b, j) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . k -> f (a, j) g) instance Monad f => Apply (IxStateT f s s) where <.> :: forall a b. IxStateT f s s (a -> b) -> IxStateT f s s a -> IxStateT f s s b (<.>) = IxStateT f s s (a -> b) -> IxStateT f s s a -> IxStateT f s s b forall j k a b i. IxStateT f j k (a -> b) -> IxStateT f i j a -> IxStateT f i k b forall (f :: * -> * -> * -> *) j k a b i. IxApply f => f j k (a -> b) -> f i j a -> f i k b (<*.*>) instance Monad f => IxApply (IxStateT f) where IxStateT f j k (a -> b) f <*.*> :: forall j k a b i. IxStateT f j k (a -> b) -> IxStateT f i j a -> IxStateT f i k b <*.*> IxStateT f i j a a = ((a -> b) -> IxStateT f i j b) -> IxStateT f j k (a -> b) -> IxStateT f i k b forall a i j b k. (a -> IxStateT f i j b) -> IxStateT f j k a -> IxStateT f i k b forall (f :: * -> * -> * -> *) a i j b k. IxBind f => (a -> f i j b) -> f j k a -> f i k b (-<<<) ((a -> b) -> IxStateT f i j a -> IxStateT f i j b forall a b j k. (a -> b) -> IxStateT f j k a -> IxStateT f j k b forall (f :: * -> * -> * -> *) a b j k. IxFunctor f => (a -> b) -> f j k a -> f j k b $.$ IxStateT f i j a a) IxStateT f j k (a -> b) f instance Monad f => Applicative (IxStateT f s s) where pure :: forall a. a -> IxStateT f s s a pure = a -> IxStateT f s s a forall a i. a -> IxStateT f i i a forall (f :: * -> * -> * -> *) a i. IxApplicative f => a -> f i i a ipure <*> :: forall a b. IxStateT f s s (a -> b) -> IxStateT f s s a -> IxStateT f s s b (<*>) = IxStateT f s s (a -> b) -> IxStateT f s s a -> IxStateT f s s b forall j k a b i. IxStateT f j k (a -> b) -> IxStateT f i j a -> IxStateT f i k b forall (f :: * -> * -> * -> *) j k a b i. IxApply f => f j k (a -> b) -> f i j a -> f i k b (<*.*>) instance Monad f => IxApplicative (IxStateT f) where ipure :: forall a i. a -> IxStateT f i i a ipure a a = (i -> f (a, i)) -> IxStateT f i i a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\i s -> (a, i) -> f (a, i) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (a a, i s)) instance Monad f => Bind (IxStateT f s s) where >>- :: forall a b. IxStateT f s s a -> (a -> IxStateT f s s b) -> IxStateT f s s b (>>-) = IxStateT f s s a -> (a -> IxStateT f s s b) -> IxStateT f s s b forall j k a i b. IxStateT f j k a -> (a -> IxStateT f i j b) -> IxStateT f i k b forall (f :: * -> * -> * -> *) j k a i b. IxBind f => f j k a -> (a -> f i j b) -> f i k b (>>>-) instance Monad f => IxBind (IxStateT f) where a -> IxStateT f i j b g -<<< :: forall a i j b k. (a -> IxStateT f i j b) -> IxStateT f j k a -> IxStateT f i k b -<<< (IxStateT k -> f (a, j) f) = (k -> f (b, i)) -> IxStateT f i k b forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (k -> f (a, j) f (k -> f (a, j)) -> ((a, j) -> f (b, i)) -> k -> f (b, i) forall (m :: * -> *) a b c. Monad m => (a -> m b) -> (b -> m c) -> a -> m c >=> (\ ~(a a', j t') -> Getting (j -> f (b, i)) (IxStateT f i j b) (j -> f (b, i)) -> IxStateT f i j b -> j -> f (b, i) forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a view (Unwrapped (IxStateT f i j b) -> Const (j -> f (b, i)) (Unwrapped (IxStateT f i j b))) -> IxStateT f i j b -> Const (j -> f (b, i)) (IxStateT f i j b) Getting (j -> f (b, i)) (IxStateT f i j b) (j -> f (b, i)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f i j b) (IxStateT f i j b) (Unwrapped (IxStateT f i j b)) (Unwrapped (IxStateT f i j b)) _Wrapped (a -> IxStateT f i j b g a a') j t')) instance Monad f => Monad (IxStateT f s s) where return :: forall a. a -> IxStateT f s s a return = a -> IxStateT f s s a forall a i. a -> IxStateT f i i a forall (f :: * -> * -> * -> *) a i. IxApplicative f => a -> f i i a ipure >>= :: forall a b. IxStateT f s s a -> (a -> IxStateT f s s b) -> IxStateT f s s b (>>=) = IxStateT f s s a -> (a -> IxStateT f s s b) -> IxStateT f s s b forall j k a i b. IxStateT f j k a -> (a -> IxStateT f i j b) -> IxStateT f i k b forall (f :: * -> * -> * -> *) j k a i b. IxBind f => f j k a -> (a -> f i j b) -> f i k b (>>>-) instance Monad f => IxMonad (IxStateT f) where instance Alt f => Alt (IxStateT f s s) where <!> :: forall a. IxStateT f s s a -> IxStateT f s s a -> IxStateT f s s a (<!>) = IxStateT f s s a -> IxStateT f s s a -> IxStateT f s s a forall i j a. IxStateT f i j a -> IxStateT f i j a -> IxStateT f i j a forall (f :: * -> * -> * -> *) i j a. IxAlt f => f i j a -> f i j a -> f i j a (<|.|>) instance Alt f => IxAlt (IxStateT f) where IxStateT j -> f (a, i) f <|.|> :: forall i j a. IxStateT f i j a -> IxStateT f i j a -> IxStateT f i j a <|.|> IxStateT j -> f (a, i) g = (j -> f (a, i)) -> IxStateT f i j a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\j s -> j -> f (a, i) f j s f (a, i) -> f (a, i) -> f (a, i) forall a. f a -> f a -> f a forall (f :: * -> *) a. Alt f => f a -> f a -> f a <!> j -> f (a, i) g j s) instance (Alternative f, Monad f) => Alternative (IxStateT f s s) where IxStateT s -> f (a, s) f <|> :: forall a. IxStateT f s s a -> IxStateT f s s a -> IxStateT f s s a <|> IxStateT s -> f (a, s) g = (s -> f (a, s)) -> IxStateT f s s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s s -> s -> f (a, s) f s s f (a, s) -> f (a, s) -> f (a, s) forall a. f a -> f a -> f a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> s -> f (a, s) g s s) empty :: forall a. IxStateT f s s a empty = (s -> f (a, s)) -> IxStateT f s s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (f (a, s) -> s -> f (a, s) forall a. a -> s -> a forall (f :: * -> *) a. Applicative f => a -> f a pure f (a, s) forall a. f a forall (f :: * -> *) a. Alternative f => f a empty) instance (Alt f, Alternative f) => IxAlternative (IxStateT f) where iempty :: forall i j a. IxStateT f i j a iempty = (j -> f (a, i)) -> IxStateT f i j a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (f (a, i) -> j -> f (a, i) forall a. a -> j -> a forall (f :: * -> *) a. Applicative f => a -> f a pure f (a, i) forall a. f a forall (f :: * -> *) a. Alternative f => f a empty) instance Monad f => MonadState s (IxStateT f s s) where state :: forall a. (s -> (a, s)) -> IxStateT f s s a state = (s -> (a, s)) -> IxStateT f s s a forall s a t. (s -> (a, t)) -> IxStateT f t s a forall (f :: * -> * -> * -> *) s a t. IxMonadState f => (s -> (a, t)) -> f t s a istate get :: IxStateT f s s s get = IxStateT f s s s forall t. IxStateT f t t t forall (f :: * -> * -> * -> *) t. IxMonadState f => f t t t iget put :: s -> IxStateT f s s () put = s -> IxStateT f s s () forall t s. t -> IxStateT f t s () forall (f :: * -> * -> * -> *) t s. IxMonadState f => t -> f t s () iput instance Monad f => IxMonadState (IxStateT f) where iget :: forall t. IxStateT f t t t iget = (t -> f (t, t)) -> IxStateT f t t t forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\t s -> (t, t) -> f (t, t) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (t s, t s)) iput :: forall t s. t -> IxStateT f t s () iput t a = (s -> f ((), t)) -> IxStateT f t s () forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s _ -> ((), t) -> f ((), t) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure ((), t a)) istate :: forall s a t. (s -> (a, t)) -> IxStateT f t s a istate s -> (a, t) f = (s -> f (a, t)) -> IxStateT f t s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT ((a, t) -> f (a, t) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure ((a, t) -> f (a, t)) -> (s -> (a, t)) -> s -> f (a, t) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . s -> (a, t) f) instance MonadReader r f => MonadReader r (IxStateT f s s) where ask :: IxStateT f s s r ask = f r -> IxStateT f s s r forall (f :: * -> *) a s. Monad f => f a -> IxStateT f s s a forall (g :: (* -> *) -> * -> * -> * -> *) (f :: * -> *) a s. (IxMonadTrans g, Monad f) => f a -> g f s s a ilift f r forall r (m :: * -> *). MonadReader r m => m r ask reader :: forall a. (r -> a) -> IxStateT f s s a reader = f a -> IxStateT f s s a forall (f :: * -> *) a s. Monad f => f a -> IxStateT f s s a forall (g :: (* -> *) -> * -> * -> * -> *) (f :: * -> *) a s. (IxMonadTrans g, Monad f) => f a -> g f s s a ilift (f a -> IxStateT f s s a) -> ((r -> a) -> f a) -> (r -> a) -> IxStateT f s s a forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (r -> a) -> f a forall a. (r -> a) -> f a forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a reader local :: forall a. (r -> r) -> IxStateT f s s a -> IxStateT f s s a local r -> r f (IxStateT s -> f (a, s) g) = (s -> f (a, s)) -> IxStateT f s s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT ((r -> r) -> f (a, s) -> f (a, s) forall a. (r -> r) -> f a -> f a forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a local r -> r f (f (a, s) -> f (a, s)) -> (s -> f (a, s)) -> s -> f (a, s) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . s -> f (a, s) g) instance MonadWriter r f => MonadWriter r (IxStateT f s s) where writer :: forall a. (a, r) -> IxStateT f s s a writer = f a -> IxStateT f s s a forall (f :: * -> *) a s. Monad f => f a -> IxStateT f s s a forall (g :: (* -> *) -> * -> * -> * -> *) (f :: * -> *) a s. (IxMonadTrans g, Monad f) => f a -> g f s s a ilift (f a -> IxStateT f s s a) -> ((a, r) -> f a) -> (a, r) -> IxStateT f s s a forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (a, r) -> f a forall a. (a, r) -> f a forall w (m :: * -> *) a. MonadWriter w m => (a, w) -> m a writer listen :: forall a. IxStateT f s s a -> IxStateT f s s (a, r) listen = ASetter (IxStateT f s s a) (IxStateT f s s (a, r)) (s -> f (a, s)) (s -> f ((a, r), s)) -> ((s -> f (a, s)) -> s -> f ((a, r), s)) -> IxStateT f s s a -> IxStateT f s s (a, r) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f s s a) -> Identity (Unwrapped (IxStateT f s s (a, r)))) -> IxStateT f s s a -> Identity (IxStateT f s s (a, r)) ASetter (IxStateT f s s a) (IxStateT f s s (a, r)) (s -> f (a, s)) (s -> f ((a, r), s)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f s s a) (IxStateT f s s (a, r)) (Unwrapped (IxStateT f s s a)) (Unwrapped (IxStateT f s s (a, r))) _Wrapped (\s -> f (a, s) f s s -> (((a, s), r) -> ((a, r), s)) -> f ((a, s), r) -> f ((a, r), s) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (\((a a, s t), r r) -> ((a a, r r), s t)) (f (a, s) -> f ((a, s), r) forall a. f a -> f (a, r) forall w (m :: * -> *) a. MonadWriter w m => m a -> m (a, w) listen (s -> f (a, s) f s s))) pass :: forall a. IxStateT f s s (a, r -> r) -> IxStateT f s s a pass = ASetter (IxStateT f s s (a, r -> r)) (IxStateT f s s a) (s -> f ((a, r -> r), s)) (s -> f (a, s)) -> ((s -> f ((a, r -> r), s)) -> s -> f (a, s)) -> IxStateT f s s (a, r -> r) -> IxStateT f s s a forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f s s (a, r -> r)) -> Identity (Unwrapped (IxStateT f s s a))) -> IxStateT f s s (a, r -> r) -> Identity (IxStateT f s s a) ASetter (IxStateT f s s (a, r -> r)) (IxStateT f s s a) (s -> f ((a, r -> r), s)) (s -> f (a, s)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f s s (a, r -> r)) (IxStateT f s s a) (Unwrapped (IxStateT f s s (a, r -> r))) (Unwrapped (IxStateT f s s a)) _Wrapped (\s -> f ((a, r -> r), s) f s s -> f ((a, s), r -> r) -> f (a, s) forall a. f (a, r -> r) -> f a forall w (m :: * -> *) a. MonadWriter w m => m (a, w -> w) -> m a pass ((((a, r -> r), s) -> ((a, s), r -> r)) -> f ((a, r -> r), s) -> f ((a, s), r -> r) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (\((a a, r -> r k), s t) -> ((a a, s t), r -> r k)) (s -> f ((a, r -> r), s) f s s))) instance MonadError r f => MonadError r (IxStateT f s s) where throwError :: forall a. r -> IxStateT f s s a throwError = f a -> IxStateT f s s a forall (f :: * -> *) a s. Monad f => f a -> IxStateT f s s a forall (g :: (* -> *) -> * -> * -> * -> *) (f :: * -> *) a s. (IxMonadTrans g, Monad f) => f a -> g f s s a ilift (f a -> IxStateT f s s a) -> (r -> f a) -> r -> IxStateT f s s a forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . r -> f a forall a. r -> f a forall e (m :: * -> *) a. MonadError e m => e -> m a throwError catchError :: forall a. IxStateT f s s a -> (r -> IxStateT f s s a) -> IxStateT f s s a catchError (IxStateT s -> f (a, s) f) r -> IxStateT f s s a g = (s -> f (a, s)) -> IxStateT f s s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s s -> f (a, s) -> (r -> f (a, s)) -> f (a, s) forall a. f a -> (r -> f a) -> f a forall e (m :: * -> *) a. MonadError e m => m a -> (e -> m a) -> m a catchError (s -> f (a, s) f s s) (\r r -> Getting (s -> f (a, s)) (IxStateT f s s a) (s -> f (a, s)) -> IxStateT f s s a -> s -> f (a, s) forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a view (Unwrapped (IxStateT f s s a) -> Const (s -> f (a, s)) (Unwrapped (IxStateT f s s a))) -> IxStateT f s s a -> Const (s -> f (a, s)) (IxStateT f s s a) Getting (s -> f (a, s)) (IxStateT f s s a) (s -> f (a, s)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f s s a) (IxStateT f s s a) (Unwrapped (IxStateT f s s a)) (Unwrapped (IxStateT f s s a)) _Wrapped (r -> IxStateT f s s a g r r) s s)) instance MonadFix f => MonadFix (IxStateT f s s) where mfix :: forall a. (a -> IxStateT f s s a) -> IxStateT f s s a mfix = (a -> IxStateT f s s a) -> IxStateT f s s a forall a t s. (a -> IxStateT f t s a) -> IxStateT f t s a forall (f :: * -> * -> * -> *) a t s. IxMonadFix f => (a -> f t s a) -> f t s a imfix instance MonadFix f => IxMonadFix (IxStateT f) where imfix :: forall a t s. (a -> IxStateT f t s a) -> IxStateT f t s a imfix a -> IxStateT f t s a f = (s -> f (a, t)) -> IxStateT f t s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s s -> ((a, t) -> f (a, t)) -> f (a, t) forall a. (a -> f a) -> f a forall (m :: * -> *) a. MonadFix m => (a -> m a) -> m a mfix (\ ~(a a, t _) -> Getting (s -> f (a, t)) (IxStateT f t s a) (s -> f (a, t)) -> IxStateT f t s a -> s -> f (a, t) forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a view (Unwrapped (IxStateT f t s a) -> Const (s -> f (a, t)) (Unwrapped (IxStateT f t s a))) -> IxStateT f t s a -> Const (s -> f (a, t)) (IxStateT f t s a) Getting (s -> f (a, t)) (IxStateT f t s a) (s -> f (a, t)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f t s a) (IxStateT f t s a) (Unwrapped (IxStateT f t s a)) (Unwrapped (IxStateT f t s a)) _Wrapped (a -> IxStateT f t s a f a a) s s)) instance MonadCont f => MonadCont (IxStateT f s s) where callCC :: forall a b. ((a -> IxStateT f s s b) -> IxStateT f s s a) -> IxStateT f s s a callCC (a -> IxStateT f s s b) -> IxStateT f s s a f = (s -> f (a, s)) -> IxStateT f s s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s s -> (((a, s) -> f (b, s)) -> f (a, s)) -> f (a, s) forall a b. ((a -> f b) -> f a) -> f a forall (m :: * -> *) a b. MonadCont m => ((a -> m b) -> m a) -> m a callCC (\(a, s) -> f (b, s) k -> Getting (s -> f (a, s)) (IxStateT f s s a) (s -> f (a, s)) -> IxStateT f s s a -> s -> f (a, s) forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a view (Unwrapped (IxStateT f s s a) -> Const (s -> f (a, s)) (Unwrapped (IxStateT f s s a))) -> IxStateT f s s a -> Const (s -> f (a, s)) (IxStateT f s s a) Getting (s -> f (a, s)) (IxStateT f s s a) (s -> f (a, s)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f s s a) (IxStateT f s s a) (Unwrapped (IxStateT f s s a)) (Unwrapped (IxStateT f s s a)) _Wrapped ((a -> IxStateT f s s b) -> IxStateT f s s a f (\a a -> (s -> f (b, s)) -> IxStateT f s s b forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s s' -> (a, s) -> f (b, s) k (a a, s s')))) s s)) instance MonadCont f => IxMonadCont (IxStateT f) where icallCC :: forall a t r b s. ((a -> IxStateT f t r b) -> IxStateT f r s a) -> IxStateT f r s a icallCC (a -> IxStateT f t r b) -> IxStateT f r s a f = (s -> f (a, r)) -> IxStateT f r s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s s -> (((a, r) -> f (b, t)) -> f (a, r)) -> f (a, r) forall a b. ((a -> f b) -> f a) -> f a forall (m :: * -> *) a b. MonadCont m => ((a -> m b) -> m a) -> m a callCC (\(a, r) -> f (b, t) k -> Getting (s -> f (a, r)) (IxStateT f r s a) (s -> f (a, r)) -> IxStateT f r s a -> s -> f (a, r) forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a view (Unwrapped (IxStateT f r s a) -> Const (s -> f (a, r)) (Unwrapped (IxStateT f r s a))) -> IxStateT f r s a -> Const (s -> f (a, r)) (IxStateT f r s a) Getting (s -> f (a, r)) (IxStateT f r s a) (s -> f (a, r)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f r s a) (IxStateT f r s a) (Unwrapped (IxStateT f r s a)) (Unwrapped (IxStateT f r s a)) _Wrapped ((a -> IxStateT f t r b) -> IxStateT f r s a f (\a a -> (r -> f (b, t)) -> IxStateT f t r b forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\r s' -> (a, r) -> f (b, t) k (a a, r s')))) s s)) instance MonadIO f => MonadIO (IxStateT f s s) where liftIO :: forall a. IO a -> IxStateT f s s a liftIO = f a -> IxStateT f s s a forall (f :: * -> *) a s. Monad f => f a -> IxStateT f s s a forall (g :: (* -> *) -> * -> * -> * -> *) (f :: * -> *) a s. (IxMonadTrans g, Monad f) => f a -> g f s s a ilift (f a -> IxStateT f s s a) -> (IO a -> f a) -> IO a -> IxStateT f s s a forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . IO a -> f a forall a. IO a -> f a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO instance (Semigroup t, Bind f) => Semigroupoid (IxStateT f t) where IxStateT j -> f (k1, t) f o :: forall j k1 i. IxStateT f t j k1 -> IxStateT f t i j -> IxStateT f t i k1 `o` IxStateT i -> f (j, t) g = (i -> f (k1, t)) -> IxStateT f t i k1 forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (i -> f (j, t) g (i -> f (j, t)) -> ((j, t) -> f (k1, t)) -> i -> f (k1, t) forall (m :: * -> *) a b c. Bind m => (a -> m b) -> (b -> m c) -> a -> m c ->- (\ ~(j a, t t) -> ((k1, t) -> (k1, t)) -> f (k1, t) -> f (k1, t) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (ASetter (k1, t) (k1, t) t t -> (t -> t) -> (k1, t) -> (k1, t) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over ASetter (k1, t) (k1, t) t t forall s t a b. Field2 s t a b => Lens s t a b Lens (k1, t) (k1, t) t t _2 (t t t -> t -> t forall a. Semigroup a => a -> a -> a <>)) (j -> f (k1, t) f j a))) instance (Monoid t, Monad f) => Category (IxStateT f t) where IxStateT b -> f (c, t) f . :: forall b c a. IxStateT f t b c -> IxStateT f t a b -> IxStateT f t a c . IxStateT a -> f (b, t) g = (a -> f (c, t)) -> IxStateT f t a c forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (a -> f (b, t) g (a -> f (b, t)) -> ((b, t) -> f (c, t)) -> a -> f (c, t) forall (m :: * -> *) a b c. Monad m => (a -> m b) -> (b -> m c) -> a -> m c >=> (\ ~(b a, t t) -> ((c, t) -> (c, t)) -> f (c, t) -> f (c, t) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (ASetter (c, t) (c, t) t t -> (t -> t) -> (c, t) -> (c, t) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over ASetter (c, t) (c, t) t t forall s t a b. Field2 s t a b => Lens s t a b Lens (c, t) (c, t) t t _2 (t t t -> t -> t forall a. Semigroup a => a -> a -> a <>)) (b -> f (c, t) f b a))) id :: forall a. IxStateT f t a a id = (a -> f (a, t)) -> IxStateT f t a a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\a s -> (a, t) -> f (a, t) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (a s, t forall a. Monoid a => a mempty)) instance Functor f => Profunctor (IxStateT f t) where dimap :: forall a b c d. (a -> b) -> (c -> d) -> IxStateT f t b c -> IxStateT f t a d dimap a -> b f c -> d g (IxStateT b -> f (c, t) k) = (a -> f (d, t)) -> IxStateT f t a d forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (((c, t) -> (d, t)) -> f (c, t) -> f (d, t) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (ASetter (c, t) (d, t) c d -> (c -> d) -> (c, t) -> (d, t) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over ASetter (c, t) (d, t) c d forall s t a b. Field1 s t a b => Lens s t a b Lens (c, t) (d, t) c d _1 c -> d g) (f (c, t) -> f (d, t)) -> (a -> f (c, t)) -> a -> f (d, t) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . b -> f (c, t) k (b -> f (c, t)) -> (a -> b) -> a -> f (c, t) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . a -> b f) instance (Monoid t, Applicative f) => Choice (IxStateT f t) where left' :: forall a b c. IxStateT f t a b -> IxStateT f t (Either a c) (Either b c) left' = ASetter (IxStateT f t a b) (IxStateT f t (Either a c) (Either b c)) (a -> f (b, t)) (Either a c -> f (Either b c, t)) -> ((a -> f (b, t)) -> Either a c -> f (Either b c, t)) -> IxStateT f t a b -> IxStateT f t (Either a c) (Either b c) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f t a b) -> Identity (Unwrapped (IxStateT f t (Either a c) (Either b c)))) -> IxStateT f t a b -> Identity (IxStateT f t (Either a c) (Either b c)) ASetter (IxStateT f t a b) (IxStateT f t (Either a c) (Either b c)) (a -> f (b, t)) (Either a c -> f (Either b c, t)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f t a b) (IxStateT f t (Either a c) (Either b c)) (Unwrapped (IxStateT f t a b)) (Unwrapped (IxStateT f t (Either a c) (Either b c))) _Wrapped (\a -> f (b, t) f -> (a -> f (Either b c, t)) -> (c -> f (Either b c, t)) -> Either a c -> f (Either b c, t) forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (((b, t) -> (Either b c, t)) -> f (b, t) -> f (Either b c, t) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (ASetter (b, t) (Either b c, t) b (Either b c) -> (b -> Either b c) -> (b, t) -> (Either b c, t) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over ASetter (b, t) (Either b c, t) b (Either b c) forall s t a b. Field1 s t a b => Lens s t a b Lens (b, t) (Either b c, t) b (Either b c) _1 b -> Either b c forall a b. a -> Either a b Left) (f (b, t) -> f (Either b c, t)) -> (a -> f (b, t)) -> a -> f (Either b c, t) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . a -> f (b, t) f) (\c c -> (Either b c, t) -> f (Either b c, t) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (c -> Either b c forall a b. b -> Either a b Right c c, t forall a. Monoid a => a mempty))) right' :: forall a b c. IxStateT f t a b -> IxStateT f t (Either c a) (Either c b) right' = ASetter (IxStateT f t a b) (IxStateT f t (Either c a) (Either c b)) (a -> f (b, t)) (Either c a -> f (Either c b, t)) -> ((a -> f (b, t)) -> Either c a -> f (Either c b, t)) -> IxStateT f t a b -> IxStateT f t (Either c a) (Either c b) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f t a b) -> Identity (Unwrapped (IxStateT f t (Either c a) (Either c b)))) -> IxStateT f t a b -> Identity (IxStateT f t (Either c a) (Either c b)) ASetter (IxStateT f t a b) (IxStateT f t (Either c a) (Either c b)) (a -> f (b, t)) (Either c a -> f (Either c b, t)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f t a b) (IxStateT f t (Either c a) (Either c b)) (Unwrapped (IxStateT f t a b)) (Unwrapped (IxStateT f t (Either c a) (Either c b))) _Wrapped (\a -> f (b, t) f -> (c -> f (Either c b, t)) -> (a -> f (Either c b, t)) -> Either c a -> f (Either c b, t) forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (\c c -> (Either c b, t) -> f (Either c b, t) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (c -> Either c b forall a b. a -> Either a b Left c c, t forall a. Monoid a => a mempty)) (((b, t) -> (Either c b, t)) -> f (b, t) -> f (Either c b, t) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (ASetter (b, t) (Either c b, t) b (Either c b) -> (b -> Either c b) -> (b, t) -> (Either c b, t) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over ASetter (b, t) (Either c b, t) b (Either c b) forall s t a b. Field1 s t a b => Lens s t a b Lens (b, t) (Either c b, t) b (Either c b) _1 b -> Either c b forall a b. b -> Either a b Right) (f (b, t) -> f (Either c b, t)) -> (a -> f (b, t)) -> a -> f (Either c b, t) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . a -> f (b, t) f)) instance Functor f => Strong (IxStateT f t) where first' :: forall a b c. IxStateT f t a b -> IxStateT f t (a, c) (b, c) first' = ASetter (IxStateT f t a b) (IxStateT f t (a, c) (b, c)) (a -> f (b, t)) ((a, c) -> f ((b, c), t)) -> ((a -> f (b, t)) -> (a, c) -> f ((b, c), t)) -> IxStateT f t a b -> IxStateT f t (a, c) (b, c) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f t a b) -> Identity (Unwrapped (IxStateT f t (a, c) (b, c)))) -> IxStateT f t a b -> Identity (IxStateT f t (a, c) (b, c)) ASetter (IxStateT f t a b) (IxStateT f t (a, c) (b, c)) (a -> f (b, t)) ((a, c) -> f ((b, c), t)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f t a b) (IxStateT f t (a, c) (b, c)) (Unwrapped (IxStateT f t a b)) (Unwrapped (IxStateT f t (a, c) (b, c))) _Wrapped (\a -> f (b, t) f (a a, c c) -> ((b, t) -> ((b, c), t)) -> f (b, t) -> f ((b, c), t) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (\(b b, t t) -> ((b b, c c), t t)) (a -> f (b, t) f a a)) second' :: forall a b c. IxStateT f t a b -> IxStateT f t (c, a) (c, b) second' = ASetter (IxStateT f t a b) (IxStateT f t (c, a) (c, b)) (a -> f (b, t)) ((c, a) -> f ((c, b), t)) -> ((a -> f (b, t)) -> (c, a) -> f ((c, b), t)) -> IxStateT f t a b -> IxStateT f t (c, a) (c, b) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f t a b) -> Identity (Unwrapped (IxStateT f t (c, a) (c, b)))) -> IxStateT f t a b -> Identity (IxStateT f t (c, a) (c, b)) ASetter (IxStateT f t a b) (IxStateT f t (c, a) (c, b)) (a -> f (b, t)) ((c, a) -> f ((c, b), t)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f t a b) (IxStateT f t (c, a) (c, b)) (Unwrapped (IxStateT f t a b)) (Unwrapped (IxStateT f t (c, a) (c, b))) _Wrapped (\a -> f (b, t) f (c c, a a) -> ((b, t) -> ((c, b), t)) -> f (b, t) -> f ((c, b), t) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (\(b b, t t) -> ((c c, b b), t t)) (a -> f (b, t) f a a)) instance (Monad f, Monoid t) => Arrow (IxStateT f t) where arr :: forall b c. (b -> c) -> IxStateT f t b c arr b -> c f = (b -> f (c, t)) -> IxStateT f t b c forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\b s -> (c, t) -> f (c, t) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (b -> c f b s, t forall a. Monoid a => a mempty)) first :: forall b c d. IxStateT f t b c -> IxStateT f t (b, d) (c, d) first = ASetter (IxStateT f t b c) (IxStateT f t (b, d) (c, d)) (b -> f (c, t)) ((b, d) -> f ((c, d), t)) -> ((b -> f (c, t)) -> (b, d) -> f ((c, d), t)) -> IxStateT f t b c -> IxStateT f t (b, d) (c, d) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f t b c) -> Identity (Unwrapped (IxStateT f t (b, d) (c, d)))) -> IxStateT f t b c -> Identity (IxStateT f t (b, d) (c, d)) ASetter (IxStateT f t b c) (IxStateT f t (b, d) (c, d)) (b -> f (c, t)) ((b, d) -> f ((c, d), t)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f t b c) (IxStateT f t (b, d) (c, d)) (Unwrapped (IxStateT f t b c)) (Unwrapped (IxStateT f t (b, d) (c, d))) _Wrapped (\b -> f (c, t) f (b b, d d) -> ((c, t) -> ((c, d), t)) -> f (c, t) -> f ((c, d), t) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (\(c c, t t) -> ((c c, d d), t t)) (b -> f (c, t) f b b)) instance (Monad f, Monoid t) => ArrowApply (IxStateT f t) where app :: forall b c. IxStateT f t (IxStateT f t b c, b) c app = ((IxStateT f t b c, b) -> f (c, t)) -> IxStateT f t (IxStateT f t b c, b) c forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\(IxStateT b -> f (c, t) k, b b) -> b -> f (c, t) k b b) instance (Monad f, Monoid t) => ArrowChoice (IxStateT f t) where left :: forall b c d. IxStateT f t b c -> IxStateT f t (Either b d) (Either c d) left = ASetter (IxStateT f t b c) (IxStateT f t (Either b d) (Either c d)) (b -> f (c, t)) (Either b d -> f (Either c d, t)) -> ((b -> f (c, t)) -> Either b d -> f (Either c d, t)) -> IxStateT f t b c -> IxStateT f t (Either b d) (Either c d) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over (Unwrapped (IxStateT f t b c) -> Identity (Unwrapped (IxStateT f t (Either b d) (Either c d)))) -> IxStateT f t b c -> Identity (IxStateT f t (Either b d) (Either c d)) ASetter (IxStateT f t b c) (IxStateT f t (Either b d) (Either c d)) (b -> f (c, t)) (Either b d -> f (Either c d, t)) forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t) Iso (IxStateT f t b c) (IxStateT f t (Either b d) (Either c d)) (Unwrapped (IxStateT f t b c)) (Unwrapped (IxStateT f t (Either b d) (Either c d))) _Wrapped (\b -> f (c, t) k -> (b -> f (Either c d, t)) -> (d -> f (Either c d, t)) -> Either b d -> f (Either c d, t) forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (((c, t) -> (Either c d, t)) -> f (c, t) -> f (Either c d, t) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (ASetter (c, t) (Either c d, t) c (Either c d) -> (c -> Either c d) -> (c, t) -> (Either c d, t) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over ASetter (c, t) (Either c d, t) c (Either c d) forall s t a b. Field1 s t a b => Lens s t a b Lens (c, t) (Either c d, t) c (Either c d) _1 c -> Either c d forall a b. a -> Either a b Left) (f (c, t) -> f (Either c d, t)) -> (b -> f (c, t)) -> b -> f (Either c d, t) forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . b -> f (c, t) k) (\d d -> (Either c d, t) -> f (Either c d, t) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (d -> Either c d forall a b. b -> Either a b Right d d, t forall a. Monoid a => a mempty))) instance IxBindTrans IxStateT where iliftB :: forall (f :: * -> *) a s. Bind f => f a -> IxStateT f s s a iliftB f a a = (s -> f (a, s)) -> IxStateT f s s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s s -> (a -> (a, s)) -> f a -> f (a, s) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (, s s) f a a) instance IxMonadTrans IxStateT where ilift :: forall (f :: * -> *) a s. Monad f => f a -> IxStateT f s s a ilift f a a = (s -> f (a, s)) -> IxStateT f s s a forall (f :: * -> *) t s a. (s -> f (a, t)) -> IxStateT f t s a IxStateT (\s s -> (a -> (a, s)) -> f a -> f (a, s) forall a b. (a -> b) -> f a -> f b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (, s s) f a a)