moduleDistribution.Utils.MapAccum(mapAccumM )whereimportDistribution.Compat.PreludeimportPrelude()-- Like StateT but with return tuple swappednewtypeStateM s m a =StateM {forall s (m :: * -> *) a. StateM s m a -> s -> m (s, a)
runStateM ::s ->m (s ,a )}instanceFunctorm =>Functor(StateM s m )wherefmap :: forall a b. (a -> b) -> StateM s m a -> StateM s m b
fmapa -> b
f (StateM s -> m (s, a)
x )=(s -> m (s, b)) -> StateM s m b
forall s (m :: * -> *) a. (s -> m (s, a)) -> StateM s m a
StateM ((s -> m (s, b)) -> StateM s m b)
-> (s -> m (s, b)) -> StateM s m b
forall a b. (a -> b) -> a -> b
$\s
s ->((s, a) -> (s, b)) -> m (s, a) -> m (s, b)
forall a b. (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap(\(s
s' ,a
a )->(s
s' ,a -> b
f a
a ))(s -> m (s, a)
x s
s )instanceMonadm =>Applicative(StateM s m )wherepure :: forall a. a -> StateM s m a
purea
x =(s -> m (s, a)) -> StateM s m a
forall s (m :: * -> *) a. (s -> m (s, a)) -> StateM s m a
StateM ((s -> m (s, a)) -> StateM s m a)
-> (s -> m (s, a)) -> StateM s m a
forall a b. (a -> b) -> a -> b
$\s
s ->(s, a) -> m (s, a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return(s
s ,a
x )StateM s -> m (s, a -> b)
f <*> :: forall a b. StateM s m (a -> b) -> StateM s m a -> StateM s m b
<*>StateM s -> m (s, a)
x =(s -> m (s, b)) -> StateM s m b
forall s (m :: * -> *) a. (s -> m (s, a)) -> StateM s m a
StateM ((s -> m (s, b)) -> StateM s m b)
-> (s -> m (s, b)) -> StateM s m b
forall a b. (a -> b) -> a -> b
$\s
s ->do(s
s' ,a -> b
f' )<-s -> m (s, a -> b)
f s
s (s
s'' ,a
x' )<-s -> m (s, a)
x s
s' (s, b) -> m (s, b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return(s
s'' ,a -> b
f' a
x' )-- | Monadic variant of 'mapAccumL'.mapAccumM ::(Monadm ,Traversablet )=>(a ->b ->m (a ,c ))->a ->t b ->m (a ,t c )mapAccumM :: forall (m :: * -> *) (t :: * -> *) a b c.
(Monad m, Traversable t) =>
(a -> b -> m (a, c)) -> a -> t b -> m (a, t c)
mapAccumM a -> b -> m (a, c)
f a
s t b
t =StateM a m (t c) -> a -> m (a, t c)
forall s (m :: * -> *) a. StateM s m a -> s -> m (s, a)
runStateM ((b -> StateM a m c) -> t b -> StateM a m (t c)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b)
traverse(\b
x ->(a -> m (a, c)) -> StateM a m c
forall s (m :: * -> *) a. (s -> m (s, a)) -> StateM s m a
StateM (\a
s' ->a -> b -> m (a, c)
f a
s' b
x ))t b
t )a
s 

AltStyle によって変換されたページ (->オリジナル) /