{-# LANGUAGE DerivingVia #-} {-# LANGUAGE QuantifiedConstraints #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE BlockArguments #-} {-# LANGUAGE DeriveFunctor #-} module FMonad.State.Day (StateT(..), flift, toOuter, fromOuter, toInner, fromInner, State, state, state_, get, put, runState ) where import Control.Monad.Trans.Identity import Data.Functor.Day ( Day(..), day ) import Data.Functor.Day.Curried ( Curried(Curried) ) import Data.Functor.Day.Comonoid import FMonad import FMonad.Adjoint import FStrong import qualified FMonad.State.Simple.Inner as Simple.Inner import qualified FMonad.State.Simple.Outer as Simple.Outer import Data.Functor.Day.Extra import Data.Coerce (coerce) import Data.Functor.Identity import Data.Function ((&)) newtype StateT s mm x a = StateT { forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) a. StateT s mm x a -> forall r. s (a -> r) -> mm (Day s x) r runStateT :: forall r. s (a -> r) -> mm (Day s x) r } deriving stock (forall a b. (a -> b) -> StateT s mm x a -> StateT s mm x b) -> (forall a b. a -> StateT s mm x b -> StateT s mm x a) -> Functor (StateT s mm x) forall a b. a -> StateT s mm x b -> StateT s mm x a forall a b. (a -> b) -> StateT s mm x a -> StateT s mm x b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) a b. Functor s => a -> StateT s mm x b -> StateT s mm x a forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) a b. Functor s => (a -> b) -> StateT s mm x a -> StateT s mm x b $cfmap :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) a b. Functor s => (a -> b) -> StateT s mm x a -> StateT s mm x b fmap :: forall a b. (a -> b) -> StateT s mm x a -> StateT s mm x b $c<$ :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) a b. Functor s => a -> StateT s mm x b -> StateT s mm x a <$ :: forall a b. a -> StateT s mm x b -> StateT s mm x a Functor deriving ((forall (g :: * -> *). Functor g => Functor (StateT s mm g)) => (forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> StateT s mm g x -> StateT s mm h x) -> FFunctor (StateT s mm) forall (g :: * -> *). Functor g => Functor (StateT s mm g) forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> StateT s mm g x -> StateT s mm h x forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (g :: * -> *). (FFunctor mm, Functor s, Functor g) => Functor (StateT s mm g) forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor mm, Functor s, Functor g, Functor h) => (g ~> h) -> StateT s mm g x -> StateT s mm h x forall (ff :: (* -> *) -> * -> *). (forall (g :: * -> *). Functor g => Functor (ff g)) => (forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> ff g x -> ff h x) -> FFunctor ff $cffmap :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor mm, Functor s, Functor g, Functor h) => (g ~> h) -> StateT s mm g x -> StateT s mm h x ffmap :: forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> StateT s mm g x -> StateT s mm h x FFunctor, FFunctor (StateT s mm) FFunctor (StateT s mm) => (forall (g :: * -> *). Functor g => g ~> StateT s mm g) -> (forall (g :: * -> *) (h :: * -> *) a. (Functor g, Functor h) => (g ~> StateT s mm h) -> StateT s mm g a -> StateT s mm h a) -> FMonad (StateT s mm) forall (g :: * -> *). Functor g => g ~> StateT s mm g forall (g :: * -> *) (h :: * -> *) a. (Functor g, Functor h) => (g ~> StateT s mm h) -> StateT s mm g a -> StateT s mm h a forall (s :: * -> *) (mm :: (* -> *) -> * -> *). (Functor s, FMonad mm) => FFunctor (StateT s mm) forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (g :: * -> *). (Functor s, FMonad mm, Functor g) => g ~> StateT s mm g forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) a. (Functor s, FMonad mm, Functor g, Functor h) => (g ~> StateT s mm h) -> StateT s mm g a -> StateT s mm h a forall (ff :: (* -> *) -> * -> *). FFunctor ff => (forall (g :: * -> *). Functor g => g ~> ff g) -> (forall (g :: * -> *) (h :: * -> *) a. (Functor g, Functor h) => (g ~> ff h) -> ff g a -> ff h a) -> FMonad ff $cfpure :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (g :: * -> *). (Functor s, FMonad mm, Functor g) => g ~> StateT s mm g fpure :: forall (g :: * -> *). Functor g => g ~> StateT s mm g $cfbind :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) a. (Functor s, FMonad mm, Functor g, Functor h) => (g ~> StateT s mm h) -> StateT s mm g a -> StateT s mm h a fbind :: forall (g :: * -> *) (h :: * -> *) a. (Functor g, Functor h) => (g ~> StateT s mm h) -> StateT s mm g a -> StateT s mm h a FMonad) via (AdjointT (Day s) (Curried s) mm) toAdjointT :: StateT s mm x ~> AdjointT (Day s) (Curried s) mm x toAdjointT :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) x. StateT s mm x x -> AdjointT (Day s) (Curried s) mm x x toAdjointT = StateT s mm x x -> AdjointT (Day s) (Curried s) mm x x forall a b. Coercible a b => a -> b coerce fromAdjointT :: AdjointT (Day s) (Curried s) mm x ~> StateT s mm x fromAdjointT :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) x. AdjointT (Day s) (Curried s) mm x x -> StateT s mm x x fromAdjointT = AdjointT (Day s) (Curried s) mm x x -> StateT s mm x x forall a b. Coercible a b => a -> b coerce flift :: (Functor s, FStrong mm, Functor x) => mm x ~> StateT s mm x flift :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *). (Functor s, FStrong mm, Functor x) => mm x ~> StateT s mm x flift mm x x mm = (forall r. s (x -> r) -> mm (Day s x) r) -> StateT s mm x x forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) a. (forall r. s (a -> r) -> mm (Day s x) r) -> StateT s mm x a StateT ((forall r. s (x -> r) -> mm (Day s x) r) -> StateT s mm x x) -> (forall r. s (x -> r) -> mm (Day s x) r) -> StateT s mm x x forall a b. (a -> b) -> a -> b $ \s (x -> r) sf -> Day s (mm x) r -> mm (Day s x) r Day s (mm x) ~> mm (Day s x) forall (ff :: (* -> *) -> * -> *) (h :: * -> *) (g :: * -> *). (FStrong ff, Functor h) => Day g (ff h) ~> ff (Day g h) fstrength' (s (x -> r) -> mm x x -> Day s (mm x) r forall (f :: * -> *) a b (g :: * -> *). f (a -> b) -> g a -> Day f g b day s (x -> r) sf mm x x mm) toOuter :: (Functor x, FFunctor mm) => StateT ((,) s0) mm x ~> Simple.Outer.StateT s0 mm x toOuter :: forall (x :: * -> *) (mm :: (* -> *) -> * -> *) s0. (Functor x, FFunctor mm) => StateT ((,) s0) mm x ~> StateT s0 mm x toOuter = AdjointT (EnvT s0) (ReaderT s0) mm x x -> StateT s0 mm x x forall s0 (mm :: (* -> *) -> * -> *) (x1 :: * -> *) x2. AdjointT (EnvT s0) (ReaderT s0) mm x1 x2 -> StateT s0 mm x1 x2 Simple.Outer.fromAdjointT (AdjointT (EnvT s0) (ReaderT s0) mm x x -> StateT s0 mm x x) -> (StateT ((,) s0) mm x x -> AdjointT (EnvT s0) (ReaderT s0) mm x x) -> StateT ((,) s0) mm x x -> StateT s0 mm x x forall b c a. (b -> c) -> (a -> b) -> a -> c . ReaderT s0 (mm (EnvT s0 x)) x -> AdjointT (EnvT s0) (ReaderT s0) mm x x forall {k} {k1} {k2} {k3} (ff :: k -> k1) (uu :: k2 -> k3 -> *) (mm :: k1 -> k2) (g :: k) (x :: k3). uu (mm (ff g)) x -> AdjointT ff uu mm g x AdjointT (ReaderT s0 (mm (EnvT s0 x)) x -> AdjointT (EnvT s0) (ReaderT s0) mm x x) -> (StateT ((,) s0) mm x x -> ReaderT s0 (mm (EnvT s0 x)) x) -> StateT ((,) s0) mm x x -> AdjointT (EnvT s0) (ReaderT s0) mm x x forall b c a. (b -> c) -> (a -> b) -> a -> c . (mm (Day ((,) s0) x) ~> mm (EnvT s0 x)) -> ReaderT s0 (mm (Day ((,) s0) x)) x -> ReaderT s0 (mm (EnvT s0 x)) x forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> ReaderT s0 g x -> ReaderT s0 h x forall (ff :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor ff, Functor g, Functor h) => (g ~> h) -> ff g x -> ff h x ffmap ((Day ((,) s0) x ~> EnvT s0 x) -> mm (Day ((,) s0) x) x -> mm (EnvT s0 x) x forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> mm g x -> mm h x forall (ff :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor ff, Functor g, Functor h) => (g ~> h) -> ff g x -> ff h x ffmap Day ((,) s0) x x -> EnvT s0 x x Day ((,) s0) x ~> EnvT s0 x forall (f :: * -> *) s0. Functor f => Day ((,) s0) f ~> EnvT s0 f dayToEnv) (ReaderT s0 (mm (Day ((,) s0) x)) x -> ReaderT s0 (mm (EnvT s0 x)) x) -> (StateT ((,) s0) mm x x -> ReaderT s0 (mm (Day ((,) s0) x)) x) -> StateT ((,) s0) mm x x -> ReaderT s0 (mm (EnvT s0 x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . Curried ((,) s0) (mm (Day ((,) s0) x)) x -> ReaderT s0 (mm (Day ((,) s0) x)) x forall s0 (f :: * -> *) x. Curried ((,) s0) f x -> ReaderT s0 f x curriedToReader (Curried ((,) s0) (mm (Day ((,) s0) x)) x -> ReaderT s0 (mm (Day ((,) s0) x)) x) -> (StateT ((,) s0) mm x x -> Curried ((,) s0) (mm (Day ((,) s0) x)) x) -> StateT ((,) s0) mm x x -> ReaderT s0 (mm (Day ((,) s0) x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x -> Curried ((,) s0) (mm (Day ((,) s0) x)) x forall {k1} {k2} {k3} {k4} (ff :: k1 -> k2) (uu :: k3 -> k4 -> *) (mm :: k2 -> k3) (g :: k1) (x :: k4). AdjointT ff uu mm g x -> uu (mm (ff g)) x runAdjointT (AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x -> Curried ((,) s0) (mm (Day ((,) s0) x)) x) -> (StateT ((,) s0) mm x x -> AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x) -> StateT ((,) s0) mm x x -> Curried ((,) s0) (mm (Day ((,) s0) x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . StateT ((,) s0) mm x x -> AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) x. StateT s mm x x -> AdjointT (Day s) (Curried s) mm x x toAdjointT fromOuter :: (Functor x, FFunctor mm) => Simple.Outer.StateT s0 mm x ~> StateT ((,) s0) mm x fromOuter :: forall (x :: * -> *) (mm :: (* -> *) -> * -> *) s0. (Functor x, FFunctor mm) => StateT s0 mm x ~> StateT ((,) s0) mm x fromOuter = AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x -> StateT ((,) s0) mm x x forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) x. AdjointT (Day s) (Curried s) mm x x -> StateT s mm x x fromAdjointT (AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x -> StateT ((,) s0) mm x x) -> (StateT s0 mm x x -> AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x) -> StateT s0 mm x x -> StateT ((,) s0) mm x x forall b c a. (b -> c) -> (a -> b) -> a -> c . Curried ((,) s0) (mm (Day ((,) s0) x)) x -> AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x forall {k} {k1} {k2} {k3} (ff :: k -> k1) (uu :: k2 -> k3 -> *) (mm :: k1 -> k2) (g :: k) (x :: k3). uu (mm (ff g)) x -> AdjointT ff uu mm g x AdjointT (Curried ((,) s0) (mm (Day ((,) s0) x)) x -> AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x) -> (StateT s0 mm x x -> Curried ((,) s0) (mm (Day ((,) s0) x)) x) -> StateT s0 mm x x -> AdjointT (Day ((,) s0)) (Curried ((,) s0)) mm x x forall b c a. (b -> c) -> (a -> b) -> a -> c . (mm (EnvT s0 x) ~> mm (Day ((,) s0) x)) -> Curried ((,) s0) (mm (EnvT s0 x)) x -> Curried ((,) s0) (mm (Day ((,) s0) x)) x forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> Curried ((,) s0) g x -> Curried ((,) s0) h x forall (ff :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor ff, Functor g, Functor h) => (g ~> h) -> ff g x -> ff h x ffmap ((EnvT s0 x ~> Day ((,) s0) x) -> mm (EnvT s0 x) x -> mm (Day ((,) s0) x) x forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> mm g x -> mm h x forall (ff :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor ff, Functor g, Functor h) => (g ~> h) -> ff g x -> ff h x ffmap EnvT s0 x x -> Day ((,) s0) x x EnvT s0 x ~> Day ((,) s0) x forall s0 (f :: * -> *) x. EnvT s0 f x -> Day ((,) s0) f x envToDay) (Curried ((,) s0) (mm (EnvT s0 x)) x -> Curried ((,) s0) (mm (Day ((,) s0) x)) x) -> (StateT s0 mm x x -> Curried ((,) s0) (mm (EnvT s0 x)) x) -> StateT s0 mm x x -> Curried ((,) s0) (mm (Day ((,) s0) x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . ReaderT s0 (mm (EnvT s0 x)) x -> Curried ((,) s0) (mm (EnvT s0 x)) x ReaderT s0 (mm (EnvT s0 x)) ~> Curried ((,) s0) (mm (EnvT s0 x)) forall (f :: * -> *) s0. Functor f => ReaderT s0 f ~> Curried ((,) s0) f readerToCurried (ReaderT s0 (mm (EnvT s0 x)) x -> Curried ((,) s0) (mm (EnvT s0 x)) x) -> (StateT s0 mm x x -> ReaderT s0 (mm (EnvT s0 x)) x) -> StateT s0 mm x x -> Curried ((,) s0) (mm (EnvT s0 x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . AdjointT (EnvT s0) (ReaderT s0) mm x x -> ReaderT s0 (mm (EnvT s0 x)) x forall {k1} {k2} {k3} {k4} (ff :: k1 -> k2) (uu :: k3 -> k4 -> *) (mm :: k2 -> k3) (g :: k1) (x :: k4). AdjointT ff uu mm g x -> uu (mm (ff g)) x runAdjointT (AdjointT (EnvT s0) (ReaderT s0) mm x x -> ReaderT s0 (mm (EnvT s0 x)) x) -> (StateT s0 mm x x -> AdjointT (EnvT s0) (ReaderT s0) mm x x) -> StateT s0 mm x x -> ReaderT s0 (mm (EnvT s0 x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . StateT s0 mm x x -> AdjointT (EnvT s0) (ReaderT s0) mm x x forall s0 (mm :: (* -> *) -> * -> *) (x1 :: * -> *) x2. StateT s0 mm x1 x2 -> AdjointT (EnvT s0) (ReaderT s0) mm x1 x2 Simple.Outer.toAdjointT toInner :: (Functor x, FFunctor mm) => StateT ((->) s1) mm x ~> Simple.Inner.StateT s1 mm x toInner :: forall (x :: * -> *) (mm :: (* -> *) -> * -> *) s1. (Functor x, FFunctor mm) => StateT ((->) s1) mm x ~> StateT s1 mm x toInner = AdjointT (TracedT s1) (WriterT s1) mm x x -> StateT s1 mm x x forall s1 (mm :: (* -> *) -> * -> *) (x1 :: * -> *) x2. AdjointT (TracedT s1) (WriterT s1) mm x1 x2 -> StateT s1 mm x1 x2 Simple.Inner.fromAdjointT (AdjointT (TracedT s1) (WriterT s1) mm x x -> StateT s1 mm x x) -> (StateT ((->) s1) mm x x -> AdjointT (TracedT s1) (WriterT s1) mm x x) -> StateT ((->) s1) mm x x -> StateT s1 mm x x forall b c a. (b -> c) -> (a -> b) -> a -> c . WriterT s1 (mm (TracedT s1 x)) x -> AdjointT (TracedT s1) (WriterT s1) mm x x forall {k} {k1} {k2} {k3} (ff :: k -> k1) (uu :: k2 -> k3 -> *) (mm :: k1 -> k2) (g :: k) (x :: k3). uu (mm (ff g)) x -> AdjointT ff uu mm g x AdjointT (WriterT s1 (mm (TracedT s1 x)) x -> AdjointT (TracedT s1) (WriterT s1) mm x x) -> (StateT ((->) s1) mm x x -> WriterT s1 (mm (TracedT s1 x)) x) -> StateT ((->) s1) mm x x -> AdjointT (TracedT s1) (WriterT s1) mm x x forall b c a. (b -> c) -> (a -> b) -> a -> c . (mm (Day ((->) s1) x) ~> mm (TracedT s1 x)) -> WriterT s1 (mm (Day ((->) s1) x)) x -> WriterT s1 (mm (TracedT s1 x)) x forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> WriterT s1 g x -> WriterT s1 h x forall (ff :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor ff, Functor g, Functor h) => (g ~> h) -> ff g x -> ff h x ffmap ((Day ((->) s1) x ~> TracedT s1 x) -> mm (Day ((->) s1) x) x -> mm (TracedT s1 x) x forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> mm g x -> mm h x forall (ff :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor ff, Functor g, Functor h) => (g ~> h) -> ff g x -> ff h x ffmap Day ((->) s1) x x -> TracedT s1 x x Day ((->) s1) x ~> TracedT s1 x forall (f :: * -> *) s1. Functor f => Day ((->) s1) f ~> TracedT s1 f dayToTraced) (WriterT s1 (mm (Day ((->) s1) x)) x -> WriterT s1 (mm (TracedT s1 x)) x) -> (StateT ((->) s1) mm x x -> WriterT s1 (mm (Day ((->) s1) x)) x) -> StateT ((->) s1) mm x x -> WriterT s1 (mm (TracedT s1 x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . Curried ((->) s1) (mm (Day ((->) s1) x)) x -> WriterT s1 (mm (Day ((->) s1) x)) x forall s1 (f :: * -> *) x. Curried ((->) s1) f x -> WriterT s1 f x curriedToWriter (Curried ((->) s1) (mm (Day ((->) s1) x)) x -> WriterT s1 (mm (Day ((->) s1) x)) x) -> (StateT ((->) s1) mm x x -> Curried ((->) s1) (mm (Day ((->) s1) x)) x) -> StateT ((->) s1) mm x x -> WriterT s1 (mm (Day ((->) s1) x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x -> Curried ((->) s1) (mm (Day ((->) s1) x)) x forall {k1} {k2} {k3} {k4} (ff :: k1 -> k2) (uu :: k3 -> k4 -> *) (mm :: k2 -> k3) (g :: k1) (x :: k4). AdjointT ff uu mm g x -> uu (mm (ff g)) x runAdjointT (AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x -> Curried ((->) s1) (mm (Day ((->) s1) x)) x) -> (StateT ((->) s1) mm x x -> AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x) -> StateT ((->) s1) mm x x -> Curried ((->) s1) (mm (Day ((->) s1) x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . StateT ((->) s1) mm x x -> AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) x. StateT s mm x x -> AdjointT (Day s) (Curried s) mm x x toAdjointT fromInner :: (Functor x, FFunctor mm) => Simple.Inner.StateT s1 mm x ~> StateT ((->) s1) mm x fromInner :: forall (x :: * -> *) (mm :: (* -> *) -> * -> *) s1. (Functor x, FFunctor mm) => StateT s1 mm x ~> StateT ((->) s1) mm x fromInner = AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x -> StateT ((->) s1) mm x x forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) x. AdjointT (Day s) (Curried s) mm x x -> StateT s mm x x fromAdjointT (AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x -> StateT ((->) s1) mm x x) -> (StateT s1 mm x x -> AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x) -> StateT s1 mm x x -> StateT ((->) s1) mm x x forall b c a. (b -> c) -> (a -> b) -> a -> c . Curried ((->) s1) (mm (Day ((->) s1) x)) x -> AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x forall {k} {k1} {k2} {k3} (ff :: k -> k1) (uu :: k2 -> k3 -> *) (mm :: k1 -> k2) (g :: k) (x :: k3). uu (mm (ff g)) x -> AdjointT ff uu mm g x AdjointT (Curried ((->) s1) (mm (Day ((->) s1) x)) x -> AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x) -> (StateT s1 mm x x -> Curried ((->) s1) (mm (Day ((->) s1) x)) x) -> StateT s1 mm x x -> AdjointT (Day ((->) s1)) (Curried ((->) s1)) mm x x forall b c a. (b -> c) -> (a -> b) -> a -> c . (mm (TracedT s1 x) ~> mm (Day ((->) s1) x)) -> Curried ((->) s1) (mm (TracedT s1 x)) x -> Curried ((->) s1) (mm (Day ((->) s1) x)) x forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> Curried ((->) s1) g x -> Curried ((->) s1) h x forall (ff :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor ff, Functor g, Functor h) => (g ~> h) -> ff g x -> ff h x ffmap ((TracedT s1 x ~> Day ((->) s1) x) -> mm (TracedT s1 x) x -> mm (Day ((->) s1) x) x forall (g :: * -> *) (h :: * -> *) x. (Functor g, Functor h) => (g ~> h) -> mm g x -> mm h x forall (ff :: (* -> *) -> * -> *) (g :: * -> *) (h :: * -> *) x. (FFunctor ff, Functor g, Functor h) => (g ~> h) -> ff g x -> ff h x ffmap TracedT s1 x x -> Day ((->) s1) x x TracedT s1 x ~> Day ((->) s1) x forall s1 (f :: * -> *) x. TracedT s1 f x -> Day ((->) s1) f x tracedToDay) (Curried ((->) s1) (mm (TracedT s1 x)) x -> Curried ((->) s1) (mm (Day ((->) s1) x)) x) -> (StateT s1 mm x x -> Curried ((->) s1) (mm (TracedT s1 x)) x) -> StateT s1 mm x x -> Curried ((->) s1) (mm (Day ((->) s1) x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . WriterT s1 (mm (TracedT s1 x)) x -> Curried ((->) s1) (mm (TracedT s1 x)) x WriterT s1 (mm (TracedT s1 x)) ~> Curried ((->) s1) (mm (TracedT s1 x)) forall (f :: * -> *) s1. Functor f => WriterT s1 f ~> Curried ((->) s1) f writerToCurried (WriterT s1 (mm (TracedT s1 x)) x -> Curried ((->) s1) (mm (TracedT s1 x)) x) -> (StateT s1 mm x x -> WriterT s1 (mm (TracedT s1 x)) x) -> StateT s1 mm x x -> Curried ((->) s1) (mm (TracedT s1 x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . AdjointT (TracedT s1) (WriterT s1) mm x x -> WriterT s1 (mm (TracedT s1 x)) x forall {k1} {k2} {k3} {k4} (ff :: k1 -> k2) (uu :: k3 -> k4 -> *) (mm :: k2 -> k3) (g :: k1) (x :: k4). AdjointT ff uu mm g x -> uu (mm (ff g)) x runAdjointT (AdjointT (TracedT s1) (WriterT s1) mm x x -> WriterT s1 (mm (TracedT s1 x)) x) -> (StateT s1 mm x x -> AdjointT (TracedT s1) (WriterT s1) mm x x) -> StateT s1 mm x x -> WriterT s1 (mm (TracedT s1 x)) x forall b c a. (b -> c) -> (a -> b) -> a -> c . StateT s1 mm x x -> AdjointT (TracedT s1) (WriterT s1) mm x x forall s1 (mm :: (* -> *) -> * -> *) (x1 :: * -> *) x2. StateT s1 mm x1 x2 -> AdjointT (TracedT s1) (WriterT s1) mm x1 x2 Simple.Inner.toAdjointT type State s = StateT s IdentityT state :: (FMonad mm) => (forall r. s (a -> r) -> Day s x r) -> StateT s mm x a state :: forall (mm :: (* -> *) -> * -> *) (s :: * -> *) a (x :: * -> *). FMonad mm => (forall r. s (a -> r) -> Day s x r) -> StateT s mm x a state forall r. s (a -> r) -> Day s x r f = (forall r. s (a -> r) -> mm (Day s x) r) -> StateT s mm x a forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) a. (forall r. s (a -> r) -> mm (Day s x) r) -> StateT s mm x a StateT ((forall r. s (a -> r) -> mm (Day s x) r) -> StateT s mm x a) -> (forall r. s (a -> r) -> mm (Day s x) r) -> StateT s mm x a forall a b. (a -> b) -> a -> b $ \s (a -> r) sar -> Day s x r -> mm (Day s x) r Day s x ~> mm (Day s x) forall (g :: * -> *). Functor g => g ~> mm g forall (ff :: (* -> *) -> * -> *) (g :: * -> *). (FMonad ff, Functor g) => g ~> ff g fpure (s (a -> r) -> Day s x r forall r. s (a -> r) -> Day s x r f s (a -> r) sar) state_ :: (Functor s, FMonad mm) => (forall b. s b -> (s b, x a)) -> StateT s mm x a state_ :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) a. (Functor s, FMonad mm) => (forall b. s b -> (s b, x a)) -> StateT s mm x a state_ forall b. s b -> (s b, x a) f = (forall r. s (a -> r) -> Day s x r) -> StateT s mm x a forall (mm :: (* -> *) -> * -> *) (s :: * -> *) a (x :: * -> *). FMonad mm => (forall r. s (a -> r) -> Day s x r) -> StateT s mm x a state ((s (a -> r) -> x a -> Day s x r) -> (s (a -> r), x a) -> Day s x r forall a b c. (a -> b -> c) -> (a, b) -> c uncurry s (a -> r) -> x a -> Day s x r forall (f :: * -> *) a b (g :: * -> *). f (a -> b) -> g a -> Day f g b day ((s (a -> r), x a) -> Day s x r) -> (s (a -> r) -> (s (a -> r), x a)) -> s (a -> r) -> Day s x r forall b c a. (b -> c) -> (a -> b) -> a -> c . s (a -> r) -> (s (a -> r), x a) forall b. s b -> (s b, x a) f) get :: (Comonoid s, FMonad mm) => StateT s mm s () get :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *). (Comonoid s, FMonad mm) => StateT s mm s () get = (forall r. s (() -> r) -> Day s s r) -> StateT s mm s () forall (mm :: (* -> *) -> * -> *) (s :: * -> *) a (x :: * -> *). FMonad mm => (forall r. s (a -> r) -> Day s x r) -> StateT s mm x a state (((() -> r) -> r) -> Day s s (() -> r) -> Day s s r forall a b. (a -> b) -> Day s s a -> Day s s b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap ((() -> r) -> () -> r forall a b. (a -> b) -> a -> b $ ()) (Day s s (() -> r) -> Day s s r) -> (s (() -> r) -> Day s s (() -> r)) -> s (() -> r) -> Day s s r forall b c a. (b -> c) -> (a -> b) -> a -> c . s (() -> r) -> Day s s (() -> r) forall a. s a -> Day s s a forall (f :: * -> *) a. Comonoid f => f a -> Day f f a coapply) put :: (Comonad s, FMonad mm) => s a -> StateT s mm Identity a put :: forall (s :: * -> *) (mm :: (* -> *) -> * -> *) a. (Comonad s, FMonad mm) => s a -> StateT s mm Identity a put s a sa = (forall r. s (a -> r) -> Day s Identity r) -> StateT s mm Identity a forall (mm :: (* -> *) -> * -> *) (s :: * -> *) a (x :: * -> *). FMonad mm => (forall r. s (a -> r) -> Day s x r) -> StateT s mm x a state (\s (a -> r) sar -> s a -> Identity (a -> r) -> (a -> (a -> r) -> r) -> Day s Identity r forall (f :: * -> *) (g :: * -> *) a b c. f b -> g c -> (b -> c -> a) -> Day f g a Day s a sa ((a -> r) -> Identity (a -> r) forall a. a -> Identity a Identity (s (a -> r) -> a -> r forall a. s a -> a forall (w :: * -> *) a. Comonad w => w a -> a extract s (a -> r) sar)) a -> (a -> r) -> r forall a b. a -> (a -> b) -> b (&)) runState :: State s x a -> s (a -> r) -> Day s x r runState :: forall (s :: * -> *) (x :: * -> *) a r. State s x a -> s (a -> r) -> Day s x r runState State s x a sx = IdentityT (Day s x) r -> Day s x r forall {k} (f :: k -> *) (a :: k). IdentityT f a -> f a runIdentityT (IdentityT (Day s x) r -> Day s x r) -> (s (a -> r) -> IdentityT (Day s x) r) -> s (a -> r) -> Day s x r forall b c a. (b -> c) -> (a -> b) -> a -> c . State s x a -> forall r. s (a -> r) -> IdentityT (Day s x) r forall (s :: * -> *) (mm :: (* -> *) -> * -> *) (x :: * -> *) a. StateT s mm x a -> forall r. s (a -> r) -> mm (Day s x) r runStateT State s x a sx