{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE Trustworthy #-}
module Lens.Micro
(
(&),
(<&>),
ASetter, ASetter',
sets,
(%~), over, (+~), (-~),
(<>~),
(.~), set,
(?~),
(<%~), (<<%~), (<<.~),
mapped,
mapMOf,
rewriteOf,
rewriteMOf,
transformOf,
transformMOf,
SimpleGetter,
Getting,
(^.),
to,
SimpleFold,
(^..), toListOf,
(^?),
(^?!),
traverseOf_,
forOf_,
has,
folded,
folding,
foldMapOf,
anyOf,
allOf,
noneOf,
Lens, Lens',
lens,
at,
_1, _2, _3, _4, _5,
strict, lazy,
non,
Traversal, Traversal',
traverseOf,
forOf,
singular,
failing,
filtered,
both,
traversed,
each,
ix,
_head, _tail, _init, _last,
mapAccumLOf,
worded, lined,
cosmosOf,
_Left, _Right,
_Just, _Nothing,
_Show,
LensLike, LensLike',
)
where
import Lens.Micro.Type
import Lens.Micro.Internal
import Control.Applicative
import Control.Monad
import Data.Functor.Identity
import Data.List (intercalate)
import Data.Monoid
import Data.Maybe
import Data.Tuple
import qualified Data.Foldable as F
#if MIN_VERSION_base(4,8,0)
import Data.Function ((&))
#else
import Data.Traversable (traverse)
#endif
#if MIN_VERSION_base(4,11,0)
import Data.Functor ((<&>))
#endif
#if MIN_VERSION_base(4,9,0)
import qualified Control.Monad.Fail as Fail
#endif
#if !(MIN_VERSION_base(4,8,0))
(&) :: a -> (a -> b) -> b
a & f = f a
{-# INLINE (&) #-}
infixl 1 &
#endif
#if !(MIN_VERSION_base(4,11,0))
(<&>) :: Functor f => f a -> (a -> b) -> f b
(<&>) x f = f <$> x
{-# INLINE (<&>) #-}
infixl 1 <&>
#endif
(%~) :: ASetter s t a b -> (a -> b) -> s -> t
%~ :: forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
(%~) = ASetter s t a b -> (a -> b) -> s -> t
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over
{-# INLINE (%~) #-}
infixr 4 %~
over :: ASetter s t a b -> (a -> b) -> s -> t
over :: forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter s t a b
l a -> b
f = Identity t -> t
forall a. Identity a -> a
runIdentity (Identity t -> t) -> (s -> Identity t) -> s -> t
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. ASetter s t a b
l (b -> Identity b
forall a. a -> Identity a
Identity (b -> Identity b) -> (a -> b) -> a -> Identity b
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. a -> b
f)
{-# INLINE over #-}
(+~) :: Num a => ASetter s t a a -> a -> s -> t
ASetter s t a a
l +~ :: forall a s t. Num a => ASetter s t a a -> a -> s -> t
+~ a
n = ASetter s t a a -> (a -> a) -> s -> t
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter s t a a
l (a -> a -> a
forall a. Num a => a -> a -> a
+ a
n)
{-# INLINE (+~) #-}
infixr 4 +~
(-~) :: Num a => ASetter s t a a -> a -> s -> t
ASetter s t a a
l -~ :: forall a s t. Num a => ASetter s t a a -> a -> s -> t
-~ a
n = ASetter s t a a -> (a -> a) -> s -> t
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter s t a a
l (a -> a -> a
forall a. Num a => a -> a -> a
subtract a
n)
{-# INLINE (-~) #-}
infixr 4 -~
(<>~) :: (Monoid a) => ASetter s t a a -> a -> s -> t
<>~ :: forall a s t. Monoid a => ASetter s t a a -> a -> s -> t
(<>~) ASetter s t a a
l a
a = ASetter s t a a -> (a -> a) -> s -> t
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter s t a a
l (a -> a -> a
forall a. Monoid a => a -> a -> a
`mappend` a
a)
{-# INLINE (<>~) #-}
infixr 4 <>~
(.~) :: ASetter s t a b -> b -> s -> t
.~ :: forall s t a b. ASetter s t a b -> b -> s -> t
(.~) = ASetter s t a b -> b -> s -> t
forall s t a b. ASetter s t a b -> b -> s -> t
set
{-# INLINE (.~) #-}
infixr 4 .~
set :: ASetter s t a b -> b -> s -> t
set :: forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter s t a b
l b
b = Identity t -> t
forall a. Identity a -> a
runIdentity (Identity t -> t) -> (s -> Identity t) -> s -> t
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. ASetter s t a b
l (\a
_ -> b -> Identity b
forall a. a -> Identity a
Identity b
b)
{-# INLINE set #-}
(?~) :: ASetter s t a (Maybe b) -> b -> s -> t
ASetter s t a (Maybe b)
l ?~ :: forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ b
b = ASetter s t a (Maybe b) -> Maybe b -> s -> t
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter s t a (Maybe b)
l (b -> Maybe b
forall a. a -> Maybe a
Just b
b)
{-# INLINE (?~) #-}
infixr 4 ?~
mapped :: Functor f => ASetter (f a) (f b) a b
mapped :: forall (f :: * -> *) a b. Functor f => ASetter (f a) (f b) a b
mapped = ((a -> b) -> f a -> f b) -> ASetter (f a) (f b) a b
forall a b s t. ((a -> b) -> s -> t) -> ASetter s t a b
sets (a -> b) -> f a -> f b
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
{-# INLINE mapped #-}
mapMOf :: LensLike (WrappedMonad m) s t a b -> (a -> m b) -> s -> m t
mapMOf :: forall (m :: * -> *) s t a b.
LensLike (WrappedMonad m) s t a b -> (a -> m b) -> s -> m t
mapMOf = LensLike (WrappedMonad m) s t a b -> (a -> m b) -> s -> m t
forall a b. Coercible a b => a -> b
coerce
{-# INLINE mapMOf #-}
(<%~) :: LensLike ((,) b) s t a b -> (a -> b) -> s -> (b, t)
<%~ :: forall b s t a. LensLike ((,) b) s t a b -> (a -> b) -> s -> (b, t)
(<%~) LensLike ((,) b) s t a b
l a -> b
f = LensLike ((,) b) s t a b
l ((b -> b -> (b, b)) -> b -> (b, b)
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (,) (b -> (b, b)) -> (a -> b) -> a -> (b, b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b
f)
{-# INLINE (<%~) #-}
infixr 4 <%~
(<<%~) :: LensLike ((,) a) s t a b -> (a -> b) -> s -> (a, t)
<<%~ :: forall a s t b. LensLike ((,) a) s t a b -> (a -> b) -> s -> (a, t)
(<<%~) LensLike ((,) a) s t a b
l a -> b
f = LensLike ((,) a) s t a b
l (\a
a -> (a
a, a -> b
f a
a))
{-# INLINE (<<%~) #-}
infixr 4 <<%~
(<<.~) :: LensLike ((,) a) s t a b -> b -> s -> (a, t)
<<.~ :: forall a s t b. LensLike ((,) a) s t a b -> b -> s -> (a, t)
(<<.~) LensLike ((,) a) s t a b
l b
x = LensLike ((,) a) s t a b
l (\a
a -> (a
a, b
x))
{-# INLINE (<<.~) #-}
infixr 4 <<.~
rewriteOf :: ASetter a b a b -> (b -> Maybe a) -> a -> b
rewriteOf :: forall a b. ASetter a b a b -> (b -> Maybe a) -> a -> b
rewriteOf ASetter a b a b
l b -> Maybe a
f = a -> b
go where
go :: a -> b
go = ASetter a b a b -> (b -> b) -> a -> b
forall a b. ASetter a b a b -> (b -> b) -> a -> b
transformOf ASetter a b a b
l (\b
x -> b -> (a -> b) -> Maybe a -> b
forall b a. b -> (a -> b) -> Maybe a -> b
maybe b
x a -> b
go (b -> Maybe a
f b
x))
{-# INLINE rewriteOf #-}
rewriteMOf
:: Monad m
=> LensLike (WrappedMonad m) a b a b -> (b -> m (Maybe a)) -> a -> m b
rewriteMOf :: forall (m :: * -> *) a b.
Monad m =>
LensLike (WrappedMonad m) a b a b -> (b -> m (Maybe a)) -> a -> m b
rewriteMOf LensLike (WrappedMonad m) a b a b
l b -> m (Maybe a)
f = a -> m b
go
where
go :: a -> m b
go = LensLike (WrappedMonad m) a b a b -> (b -> m b) -> a -> m b
forall (m :: * -> *) a b.
Monad m =>
LensLike (WrappedMonad m) a b a b -> (b -> m b) -> a -> m b
transformMOf LensLike (WrappedMonad m) a b a b
l (\b
x -> b -> m (Maybe a)
f b
x m (Maybe a) -> (Maybe a -> m b) -> m b
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= m b -> (a -> m b) -> Maybe a -> m b
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return b
x) a -> m b
go)
{-# INLINE rewriteMOf #-}
transformOf :: ASetter a b a b -> (b -> b) -> a -> b
transformOf :: forall a b. ASetter a b a b -> (b -> b) -> a -> b
transformOf ASetter a b a b
l b -> b
f = a -> b
go where
go :: a -> b
go = b -> b
f (b -> b) -> (a -> b) -> a -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ASetter a b a b -> (a -> b) -> a -> b
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter a b a b
l a -> b
go
{-# INLINE transformOf #-}
transformMOf
:: Monad m => LensLike (WrappedMonad m) a b a b -> (b -> m b) -> a -> m b
transformMOf :: forall (m :: * -> *) a b.
Monad m =>
LensLike (WrappedMonad m) a b a b -> (b -> m b) -> a -> m b
transformMOf LensLike (WrappedMonad m) a b a b
l b -> m b
f = a -> m b
go
where
go :: a -> m b
go a
t = LensLike (WrappedMonad m) a b a b -> (a -> m b) -> a -> m b
forall (m :: * -> *) s t a b.
LensLike (WrappedMonad m) s t a b -> (a -> m b) -> s -> m t
mapMOf LensLike (WrappedMonad m) a b a b
l a -> m b
go a
t m b -> (b -> m b) -> m b
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= b -> m b
f
{-# INLINE transformMOf #-}
(^.) :: s -> Getting a s a -> a
s
s ^. :: forall s a. s -> Getting a s a -> a
^. Getting a s a
l = Const a s -> a
forall {k} a (b :: k). Const a b -> a
getConst (Getting a s a
l a -> Const a a
forall {k} a (b :: k). a -> Const a b
Const s
s)
{-# INLINE (^.) #-}
infixl 8 ^.
to :: (s -> a) -> SimpleGetter s a
to :: forall s a. (s -> a) -> SimpleGetter s a
to s -> a
k a -> Const r a
f = Const r a -> Const r s
forall r a b. Const r a -> Const r b
phantom (Const r a -> Const r s) -> (s -> Const r a) -> s -> Const r s
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Const r a
f (a -> Const r a) -> (s -> a) -> s -> Const r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> a
k
{-# INLINE to #-}
(^..) :: s -> Getting (Endo [a]) s a -> [a]
s
s ^.. :: forall s a. s -> Getting (Endo [a]) s a -> [a]
^.. Getting (Endo [a]) s a
l = Getting (Endo [a]) s a -> s -> [a]
forall a s. Getting (Endo [a]) s a -> s -> [a]
toListOf Getting (Endo [a]) s a
l s
s
{-# INLINE (^..) #-}
infixl 8 ^..
toListOf :: Getting (Endo [a]) s a -> s -> [a]
toListOf :: forall a s. Getting (Endo [a]) s a -> s -> [a]
toListOf Getting (Endo [a]) s a
l = Getting (Endo [a]) s a -> (a -> [a] -> [a]) -> [a] -> s -> [a]
forall r s a. Getting (Endo r) s a -> (a -> r -> r) -> r -> s -> r
foldrOf Getting (Endo [a]) s a
l (:) []
{-# INLINE toListOf #-}
(^?) :: s -> Getting (First a) s a -> Maybe a
s
s ^? :: forall s a. s -> Getting (First a) s a -> Maybe a
^? Getting (First a) s a
l = First a -> Maybe a
forall a. First a -> Maybe a
getFirst (Getting (First a) s a -> (a -> First a) -> s -> First a
forall r s a. Getting r s a -> (a -> r) -> s -> r
foldMapOf Getting (First a) s a
l (Maybe a -> First a
forall a. Maybe a -> First a
First (Maybe a -> First a) -> (a -> Maybe a) -> a -> First a
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. a -> Maybe a
forall a. a -> Maybe a
Just) s
s)
{-# INLINE (^?) #-}
infixl 8 ^?
(^?!) :: HasCallStack => s -> Getting (Endo a) s a -> a
s
s ^?! :: forall s a. HasCallStack => s -> Getting (Endo a) s a -> a
^?! Getting (Endo a) s a
l = Getting (Endo a) s a -> (a -> a -> a) -> a -> s -> a
forall r s a. Getting (Endo r) s a -> (a -> r -> r) -> r -> s -> r
foldrOf Getting (Endo a) s a
l a -> a -> a
forall a b. a -> b -> a
const ([Char] -> a
forall a. HasCallStack => [Char] -> a
error [Char]
"(^?!): empty Fold") s
s
{-# INLINE (^?!) #-}
infixl 8 ^?!
traverseOf_
:: Functor f
=> Getting (Traversed r f) s a -> (a -> f r) -> s -> f ()
traverseOf_ :: forall (f :: * -> *) r s a.
Functor f =>
Getting (Traversed r f) s a -> (a -> f r) -> s -> f ()
traverseOf_ Getting (Traversed r f) s a
l a -> f r
f = f r -> f ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (f r -> f ()) -> (s -> f r) -> s -> f ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Traversed r f -> f r
forall a (f :: * -> *). Traversed a f -> f a
getTraversed (Traversed r f -> f r) -> (s -> Traversed r f) -> s -> f r
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. Getting (Traversed r f) s a
-> (a -> Traversed r f) -> s -> Traversed r f
forall r s a. Getting r s a -> (a -> r) -> s -> r
foldMapOf Getting (Traversed r f) s a
l (f r -> Traversed r f
forall a (f :: * -> *). f a -> Traversed a f
Traversed (f r -> Traversed r f) -> (a -> f r) -> a -> Traversed r f
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. a -> f r
f)
{-# INLINE traverseOf_ #-}
forOf_
:: Functor f
=> Getting (Traversed r f) s a -> s -> (a -> f r) -> f ()
forOf_ :: forall (f :: * -> *) r s a.
Functor f =>
Getting (Traversed r f) s a -> s -> (a -> f r) -> f ()
forOf_ = ((a -> f r) -> s -> f ()) -> s -> (a -> f r) -> f ()
forall a b c. (a -> b -> c) -> b -> a -> c
flip (((a -> f r) -> s -> f ()) -> s -> (a -> f r) -> f ())
-> (Getting (Traversed r f) s a -> (a -> f r) -> s -> f ())
-> Getting (Traversed r f) s a
-> s
-> (a -> f r)
-> f ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting (Traversed r f) s a -> (a -> f r) -> s -> f ()
forall (f :: * -> *) r s a.
Functor f =>
Getting (Traversed r f) s a -> (a -> f r) -> s -> f ()
traverseOf_
{-# INLINE forOf_ #-}
has :: Getting Any s a -> s -> Bool
has :: forall s a. Getting Any s a -> s -> Bool
has Getting Any s a
l = Any -> Bool
getAny (Any -> Bool) -> (s -> Any) -> s -> Bool
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. Getting Any s a -> (a -> Any) -> s -> Any
forall r s a. Getting r s a -> (a -> r) -> s -> r
foldMapOf Getting Any s a
l (\a
_ -> Bool -> Any
Any Bool
True)
{-# INLINE has #-}
folding :: F.Foldable f => (s -> f a) -> SimpleFold s a
folding :: forall (f :: * -> *) s a.
Foldable f =>
(s -> f a) -> SimpleFold s a
folding s -> f a
sfa a -> Const r a
agb = Const r () -> Const r s
forall r a b. Const r a -> Const r b
phantom (Const r () -> Const r s) -> (s -> Const r ()) -> s -> Const r s
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> Const r a) -> f a -> Const r ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
F.traverse_ a -> Const r a
agb (f a -> Const r ()) -> (s -> f a) -> s -> Const r ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> f a
sfa
{-# INLINE folding #-}
anyOf :: Getting Any s a -> (a -> Bool) -> s -> Bool
anyOf :: forall s a. Getting Any s a -> (a -> Bool) -> s -> Bool
anyOf Getting Any s a
l a -> Bool
f = Any -> Bool
getAny (Any -> Bool) -> (s -> Any) -> s -> Bool
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. Getting Any s a -> (a -> Any) -> s -> Any
forall r s a. Getting r s a -> (a -> r) -> s -> r
foldMapOf Getting Any s a
l (Bool -> Any
Any (Bool -> Any) -> (a -> Bool) -> a -> Any
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. a -> Bool
f)
{-# INLINE anyOf #-}
allOf :: Getting All s a -> (a -> Bool) -> s -> Bool
allOf :: forall s a. Getting All s a -> (a -> Bool) -> s -> Bool
allOf Getting All s a
l a -> Bool
f = All -> Bool
getAll (All -> Bool) -> (s -> All) -> s -> Bool
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. Getting All s a -> (a -> All) -> s -> All
forall r s a. Getting r s a -> (a -> r) -> s -> r
foldMapOf Getting All s a
l (Bool -> All
All (Bool -> All) -> (a -> Bool) -> a -> All
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. a -> Bool
f)
{-# INLINE allOf #-}
noneOf :: Getting Any s a -> (a -> Bool) -> s -> Bool
noneOf :: forall s a. Getting Any s a -> (a -> Bool) -> s -> Bool
noneOf Getting Any s a
l a -> Bool
f = Bool -> Bool
not (Bool -> Bool) -> (s -> Bool) -> s -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting Any s a -> (a -> Bool) -> s -> Bool
forall s a. Getting Any s a -> (a -> Bool) -> s -> Bool
anyOf Getting Any s a
l a -> Bool
f
{-# INLINE noneOf #-}
lens :: (s -> a) -> (s -> b -> t) -> Lens s t a b
lens :: forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens s -> a
sa s -> b -> t
sbt a -> f b
afb s
s = s -> b -> t
sbt s
s (b -> t) -> f b -> f t
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f b
afb (s -> a
sa s
s)
{-# INLINE lens #-}
non :: Eq a => a -> Lens' (Maybe a) a
non :: forall a. Eq a => a -> Lens' (Maybe a) a
non a
x a -> f a
afb Maybe a
s = a -> Maybe a
f (a -> Maybe a) -> f a -> f (Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f a
afb (a -> Maybe a -> a
forall a. a -> Maybe a -> a
fromMaybe a
x Maybe a
s)
where f :: a -> Maybe a
f a
y = if a
x a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
y then Maybe a
forall a. Maybe a
Nothing else a -> Maybe a
forall a. a -> Maybe a
Just a
y
{-# INLINE non #-}
traverseOf :: LensLike f s t a b -> (a -> f b) -> s -> f t
traverseOf :: forall (f :: * -> *) s t a b.
LensLike f s t a b -> LensLike f s t a b
traverseOf = LensLike f s t a b -> LensLike f s t a b
forall a. a -> a
id
{-# INLINE traverseOf #-}
forOf :: LensLike f s t a b -> s -> (a -> f b) -> f t
forOf :: forall (f :: * -> *) s t a b.
LensLike f s t a b -> s -> (a -> f b) -> f t
forOf = ((a -> f b) -> s -> f t) -> s -> (a -> f b) -> f t
forall a b c. (a -> b -> c) -> b -> a -> c
flip
{-# INLINE forOf #-}
singular :: HasCallStack => Traversal s t a a -> Lens s t a a
singular :: forall s t a. HasCallStack => Traversal s t a a -> Lens s t a a
singular Traversal s t a a
l a -> f a
afb s
s = case ((a -> Const [Identity a] a) -> Const [Identity a] t) -> [a]
forall {a} {b} {a} {b}.
((a -> Const [Identity a] b) -> Const [Identity a] b) -> [a]
ins (a -> Const [Identity a] a) -> Const [Identity a] t
forall (f :: * -> *). Applicative f => (a -> f a) -> f t
b of
(a
w:[a]
ws) -> ((a -> StateT [a] Identity a) -> State [a] t) -> [a] -> t
forall {m :: * -> *} {p} {a} {s} {a}.
Monad m =>
((p -> StateT [a] m a) -> State s a) -> s -> a
unsafeOuts (a -> StateT [a] Identity a) -> State [a] t
forall (f :: * -> *). Applicative f => (a -> f a) -> f t
b ([a] -> t) -> (a -> [a]) -> a -> t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
ws) (a -> t) -> f a -> f t
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f a
afb a
w
[] -> ((a -> StateT [a] Identity a) -> State [a] t) -> [a] -> t
forall {m :: * -> *} {p} {a} {s} {a}.
Monad m =>
((p -> StateT [a] m a) -> State s a) -> s -> a
unsafeOuts (a -> StateT [a] Identity a) -> State [a] t
forall (f :: * -> *). Applicative f => (a -> f a) -> f t
b ([a] -> t) -> (a -> [a]) -> a -> t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> t) -> f a -> f t
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
a -> f a
afb ([Char] -> a
forall a. HasCallStack => [Char] -> a
error [Char]
"Lens.Micro.singular: empty traversal")
where
Bazaar forall (f :: * -> *). Applicative f => (a -> f a) -> f t
b = (a -> Bazaar a a a) -> s -> Bazaar a a t
Traversal s t a a
l a -> Bazaar a a a
forall {a} {t}. a -> Bazaar a t t
sell s
s
sell :: a -> Bazaar a t t
sell a
w = (forall (f :: * -> *). Applicative f => (a -> f t) -> f t)
-> Bazaar a t t
forall a b t.
(forall (f :: * -> *). Applicative f => (a -> f b) -> f t)
-> Bazaar a b t
Bazaar ((a -> f t) -> a -> f t
forall a b. (a -> b) -> a -> b
$ a
w)
ins :: ((a -> Const [Identity a] b) -> Const [Identity a] b) -> [a]
ins (a -> Const [Identity a] b) -> Const [Identity a] b
f = ([Identity a] -> [a]
forall {a}. [Identity a] -> [a]
forall a b. Coercible a b => a -> b
coerce :: [Identity a] -> [a])
(Const [Identity a] b -> [Identity a]
forall {k} a (b :: k). Const a b -> a
getConst ((a -> Const [Identity a] b) -> Const [Identity a] b
f (\a
ra -> [Identity a] -> Const [Identity a] b
forall {k} a (b :: k). a -> Const a b
Const [a -> Identity a
forall a. a -> Identity a
Identity a
ra])))
unsafeOuts :: ((p -> StateT [a] m a) -> State s a) -> s -> a
unsafeOuts (p -> StateT [a] m a) -> State s a
f = State s a -> s -> a
forall s a. State s a -> s -> a
evalState ((p -> StateT [a] m a) -> State s a
f (\p
_ -> ([a] -> (a, [a])) -> StateT [a] m a
forall (m :: * -> *) s a. Monad m => (s -> (a, s)) -> StateT s m a
state (a -> [a] -> (a, [a])
forall {a}. a -> [a] -> (a, [a])
unconsWithDefault a
forall {a}. a
fakeVal)))
where fakeVal :: a
fakeVal = [Char] -> a
forall a. HasCallStack => [Char] -> a
error [Char]
"unsafeOuts: not enough elements were supplied"
unconsWithDefault :: a -> [a] -> (a, [a])
unconsWithDefault a
d [] = (a
d,[])
unconsWithDefault a
_ (a
x:[a]
xs) = (a
x,[a]
xs)
{-# INLINE singular #-}
failing :: Traversal s t a b -> Traversal s t a b -> Traversal s t a b
failing :: forall s t a b.
Traversal s t a b -> Traversal s t a b -> Traversal s t a b
failing Traversal s t a b
left Traversal s t a b
right a -> f b
afb s
s = case ((a -> Const [Identity a] b) -> Const [Identity a] t)
-> [Identity a]
forall {a} {b} {a} {b}.
((a -> Const [Identity a] b) -> Const a b) -> a
pins (a -> Const [Identity a] b) -> Const [Identity a] t
forall (f :: * -> *). Applicative f => (a -> f b) -> f t
b of
[] -> (a -> f b) -> s -> f t
Traversal s t a b
right a -> f b
afb s
s
[Identity a]
_ -> (a -> f b) -> f t
forall (f :: * -> *). Applicative f => (a -> f b) -> f t
b a -> f b
afb
where
Bazaar forall (f :: * -> *). Applicative f => (a -> f b) -> f t
b = (a -> Bazaar a b b) -> s -> Bazaar a b t
Traversal s t a b
left a -> Bazaar a b b
forall {a} {t}. a -> Bazaar a t t
sell s
s
sell :: a -> Bazaar a t t
sell a
w = (forall (f :: * -> *). Applicative f => (a -> f t) -> f t)
-> Bazaar a t t
forall a b t.
(forall (f :: * -> *). Applicative f => (a -> f b) -> f t)
-> Bazaar a b t
Bazaar ((a -> f t) -> a -> f t
forall a b. (a -> b) -> a -> b
$ a
w)
pins :: ((a -> Const [Identity a] b) -> Const a b) -> a
pins (a -> Const [Identity a] b) -> Const a b
f = Const a b -> a
forall {k} a (b :: k). Const a b -> a
getConst ((a -> Const [Identity a] b) -> Const a b
f (\a
ra -> [Identity a] -> Const [Identity a] b
forall {k} a (b :: k). a -> Const a b
Const [a -> Identity a
forall a. a -> Identity a
Identity a
ra]))
infixl 5 `failing`
filtered :: (a -> Bool) -> Traversal' a a
filtered :: forall a. (a -> Bool) -> Traversal' a a
filtered a -> Bool
p a -> f a
f a
s = if a -> Bool
p a
s then a -> f a
f a
s else a -> f a
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
s
{-# INLINE filtered #-}
both :: Traversal (a, a) (b, b) a b
both :: forall a b (f :: * -> *).
Applicative f =>
(a -> f b) -> (a, a) -> f (b, b)
both a -> f b
f = \ ~(a
a, a
b) -> (b -> b -> (b, b)) -> f b -> f b -> f (b, b)
forall a b c. (a -> b -> c) -> f a -> f b -> f c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (a -> f b
f a
a) (a -> f b
f a
b)
{-# INLINE both #-}
_head :: Cons s s a a => Traversal' s a
_head :: forall s a. Cons s s a a => Traversal' s a
_head = ((a, s) -> f (a, s)) -> s -> f s
forall s t a b. Cons s t a b => Traversal s t (a, s) (b, t)
Traversal s s (a, s) (a, s)
_Cons(((a, s) -> f (a, s)) -> s -> f s)
-> ((a -> f a) -> (a, s) -> f (a, s)) -> (a -> f a) -> s -> f s
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(a -> f a) -> (a, s) -> f (a, s)
forall s t a b. Field1 s t a b => Lens s t a b
Lens (a, s) (a, s) a a
_1
{-# INLINE _head #-}
_tail :: Cons s s a a => Traversal' s s
_tail :: forall s a. Cons s s a a => Traversal' s s
_tail = ((a, s) -> f (a, s)) -> s -> f s
forall s t a b. Cons s t a b => Traversal s t (a, s) (b, t)
Traversal s s (a, s) (a, s)
_Cons(((a, s) -> f (a, s)) -> s -> f s)
-> ((s -> f s) -> (a, s) -> f (a, s)) -> (s -> f s) -> s -> f s
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(s -> f s) -> (a, s) -> f (a, s)
forall s t a b. Field2 s t a b => Lens s t a b
Lens (a, s) (a, s) s s
_2
{-# INLINE _tail #-}
_init :: Snoc s s a a => Traversal' s s
_init :: forall s a. Snoc s s a a => Traversal' s s
_init = ((s, a) -> f (s, a)) -> s -> f s
forall s t a b. Snoc s t a b => Traversal s t (s, a) (t, b)
Traversal s s (s, a) (s, a)
_Snoc(((s, a) -> f (s, a)) -> s -> f s)
-> ((s -> f s) -> (s, a) -> f (s, a)) -> (s -> f s) -> s -> f s
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(s -> f s) -> (s, a) -> f (s, a)
forall s t a b. Field1 s t a b => Lens s t a b
Lens (s, a) (s, a) s s
_1
{-# INLINE _init #-}
_last :: Snoc s s a a => Traversal' s a
_last :: forall s a. Snoc s s a a => Traversal' s a
_last = ((s, a) -> f (s, a)) -> s -> f s
forall s t a b. Snoc s t a b => Traversal s t (s, a) (t, b)
Traversal s s (s, a) (s, a)
_Snoc(((s, a) -> f (s, a)) -> s -> f s)
-> ((a -> f a) -> (s, a) -> f (s, a)) -> (a -> f a) -> s -> f s
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(a -> f a) -> (s, a) -> f (s, a)
forall s t a b. Field2 s t a b => Lens s t a b
Lens (s, a) (s, a) a a
_2
{-# INLINE _last #-}
mapAccumLOf :: LensLike (State acc) s t a b -> (acc -> a -> (acc, b)) -> acc -> s -> (acc, t)
mapAccumLOf :: forall acc s t a b.
LensLike (State acc) s t a b
-> (acc -> a -> (acc, b)) -> acc -> s -> (acc, t)
mapAccumLOf LensLike (State acc) s t a b
l acc -> a -> (acc, b)
f acc
acc0 s
s = (t, acc) -> (acc, t)
forall a b. (a, b) -> (b, a)
swap (State acc t -> acc -> (t, acc)
forall s a. State s a -> s -> (a, s)
runState (LensLike (State acc) s t a b
l a -> StateT acc Identity b
g s
s) acc
acc0)
where
g :: a -> StateT acc Identity b
g a
a = (acc -> (b, acc)) -> StateT acc Identity b
forall (m :: * -> *) s a. Monad m => (s -> (a, s)) -> StateT s m a
state ((acc -> (b, acc)) -> StateT acc Identity b)
-> (acc -> (b, acc)) -> StateT acc Identity b
forall a b. (a -> b) -> a -> b
$ \acc
acc -> (acc, b) -> (b, acc)
forall a b. (a, b) -> (b, a)
swap (acc -> a -> (acc, b)
f acc
acc a
a)
{-# INLINE mapAccumLOf #-}
worded :: Traversal' String String
worded :: Traversal' [Char] [Char]
worded [Char] -> f [Char]
f = ([[Char]] -> [Char]) -> f [[Char]] -> f [Char]
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [[Char]] -> [Char]
unwords (f [[Char]] -> f [Char])
-> ([Char] -> f [[Char]]) -> [Char] -> f [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> f [Char]) -> [[Char]] -> f [[Char]]
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) -> [a] -> f [b]
traverse [Char] -> f [Char]
f ([[Char]] -> f [[Char]])
-> ([Char] -> [[Char]]) -> [Char] -> f [[Char]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> [[Char]]
words
{-# INLINE worded #-}
lined :: Traversal' String String
lined :: Traversal' [Char] [Char]
lined [Char] -> f [Char]
f = ([[Char]] -> [Char]) -> f [[Char]] -> f [Char]
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
"\n") (f [[Char]] -> f [Char])
-> ([Char] -> f [[Char]]) -> [Char] -> f [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> f [Char]) -> [[Char]] -> f [[Char]]
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) -> [a] -> f [b]
traverse [Char] -> f [Char]
f ([[Char]] -> f [[Char]])
-> ([Char] -> [[Char]]) -> [Char] -> f [[Char]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> [[Char]]
lines
{-# INLINE lined #-}
cosmosOf :: Traversal a t a t -> Traversal a t a b'
cosmosOf :: forall a t b'. Traversal a t a t -> Traversal a t a b'
cosmosOf Traversal a t a t
d a -> f b'
f a
s = a -> f b'
f a
s f b' -> f t -> f t
forall a b. f a -> f b -> f b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (a -> f t) -> a -> f t
Traversal a t a t
d (Traversal a t a t -> Traversal a t a b'
forall a t b'. Traversal a t a t -> Traversal a t a b'
cosmosOf (a -> f t) -> a -> f t
Traversal a t a t
d a -> f b'
f) a
s
{-# INLINE cosmosOf #-}
_Left :: Traversal (Either a b) (Either a' b) a a'
_Left :: forall a b a' (f :: * -> *).
Applicative f =>
(a -> f a') -> Either a b -> f (Either a' b)
_Left a -> f a'
f (Left a
a) = a' -> Either a' b
forall a b. a -> Either a b
Left (a' -> Either a' b) -> f a' -> f (Either a' b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f a'
f a
a
_Left a -> f a'
_ (Right b
b) = Either a' b -> f (Either a' b)
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (b -> Either a' b
forall a b. b -> Either a b
Right b
b)
{-# INLINE _Left #-}
_Right :: Traversal (Either a b) (Either a b') b b'
_Right :: forall a b b' (f :: * -> *).
Applicative f =>
(b -> f b') -> Either a b -> f (Either a b')
_Right b -> f b'
f (Right b
b) = b' -> Either a b'
forall a b. b -> Either a b
Right (b' -> Either a b') -> f b' -> f (Either a b')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> b -> f b'
f b
b
_Right b -> f b'
_ (Left a
a) = Either a b' -> f (Either a b')
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a -> Either a b'
forall a b. a -> Either a b
Left a
a)
{-# INLINE _Right #-}
_Just :: Traversal (Maybe a) (Maybe a') a a'
_Just :: forall a a' (f :: * -> *).
Applicative f =>
(a -> f a') -> Maybe a -> f (Maybe a')
_Just a -> f a'
f (Just a
a) = a' -> Maybe a'
forall a. a -> Maybe a
Just (a' -> Maybe a') -> f a' -> f (Maybe a')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f a'
f a
a
_Just a -> f a'
_ Maybe a
Nothing = Maybe a' -> f (Maybe a')
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe a'
forall a. Maybe a
Nothing
{-# INLINE _Just #-}
_Nothing :: Traversal' (Maybe a) ()
_Nothing :: forall a (f :: * -> *).
Applicative f =>
(() -> f ()) -> Maybe a -> f (Maybe a)
_Nothing () -> f ()
f Maybe a
Nothing = Maybe a -> () -> Maybe a
forall a b. a -> b -> a
const Maybe a
forall a. Maybe a
Nothing (() -> Maybe a) -> f () -> f (Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> () -> f ()
f ()
_Nothing () -> f ()
_ Maybe a
j = Maybe a -> f (Maybe a)
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe a
j
{-# INLINE _Nothing #-}
_Show :: (Show a, Read a) => Traversal' String a
_Show :: forall a. (Show a, Read a) => Traversal' [Char] a
_Show a -> f a
f [Char]
s = case ReadS a
forall a. Read a => ReadS a
reads [Char]
s of
[(a
a,[Char]
"")] -> a -> [Char]
forall a. Show a => a -> [Char]
show (a -> [Char]) -> f a -> f [Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f a
f a
a
[(a, [Char])]
_ -> [Char] -> f [Char]
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Char]
s
{-# INLINE _Show #-}
newtype Traversed a f = Traversed { forall a (f :: * -> *). Traversed a f -> f a
getTraversed :: f a }
instance Applicative f => Monoid (Traversed a f) where
mempty :: Traversed a f
mempty = f a -> Traversed a f
forall a (f :: * -> *). f a -> Traversed a f
Traversed (a -> f a
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ([Char] -> a
forall a. HasCallStack => [Char] -> a
error [Char]
"Lens.Micro.Traversed: value used"))
{-# INLINE mempty #-}
#if !MIN_VERSION_base(4,11,0)
Traversed ma `mappend` Traversed mb = Traversed (ma *> mb)
{-# INLINE mappend #-}
#else
instance Applicative f => Semigroup (Traversed a f) where
Traversed f a
ma <> :: Traversed a f -> Traversed a f -> Traversed a f
<> Traversed f a
mb = f a -> Traversed a f
forall a (f :: * -> *). f a -> Traversed a f
Traversed (f a
ma f a -> f a -> f a
forall a b. f a -> f b -> f b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> f a
mb)
{-# INLINE (<>) #-}
#endif
newtype Bazaar a b t = Bazaar (forall f. Applicative f => (a -> f b) -> f t)
instance Functor (Bazaar a b) where
fmap :: forall a b. (a -> b) -> Bazaar a b a -> Bazaar a b b
fmap a -> b
f (Bazaar forall (f :: * -> *). Applicative f => (a -> f b) -> f a
k) = (forall (f :: * -> *). Applicative f => (a -> f b) -> f b)
-> Bazaar a b b
forall a b t.
(forall (f :: * -> *). Applicative f => (a -> f b) -> f t)
-> Bazaar a b t
Bazaar ((a -> b) -> f a -> f b
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f (f a -> f b) -> ((a -> f b) -> f a) -> (a -> f b) -> f b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f b) -> f a
forall (f :: * -> *). Applicative f => (a -> f b) -> f a
k)
{-# INLINE fmap #-}
instance Applicative (Bazaar a b) where
pure :: forall a. a -> Bazaar a b a
pure a
a = (forall (f :: * -> *). Applicative f => (a -> f b) -> f a)
-> Bazaar a b a
forall a b t.
(forall (f :: * -> *). Applicative f => (a -> f b) -> f t)
-> Bazaar a b t
Bazaar ((forall (f :: * -> *). Applicative f => (a -> f b) -> f a)
-> Bazaar a b a)
-> (forall (f :: * -> *). Applicative f => (a -> f b) -> f a)
-> Bazaar a b a
forall a b. (a -> b) -> a -> b
$ \a -> f b
_ -> a -> f a
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
a
{-# INLINE pure #-}
Bazaar forall (f :: * -> *). Applicative f => (a -> f b) -> f (a -> b)
mf <*> :: forall a b. Bazaar a b (a -> b) -> Bazaar a b a -> Bazaar a b b
<*> Bazaar forall (f :: * -> *). Applicative f => (a -> f b) -> f a
ma = (forall (f :: * -> *). Applicative f => (a -> f b) -> f b)
-> Bazaar a b b
forall a b t.
(forall (f :: * -> *). Applicative f => (a -> f b) -> f t)
-> Bazaar a b t
Bazaar ((forall (f :: * -> *). Applicative f => (a -> f b) -> f b)
-> Bazaar a b b)
-> (forall (f :: * -> *). Applicative f => (a -> f b) -> f b)
-> Bazaar a b b
forall a b. (a -> b) -> a -> b
$ \a -> f b
afb -> (a -> f b) -> f (a -> b)
forall (f :: * -> *). Applicative f => (a -> f b) -> f (a -> b)
mf a -> f b
afb f (a -> b) -> f a -> f b
forall a b. f (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (a -> f b) -> f a
forall (f :: * -> *). Applicative f => (a -> f b) -> f a
ma a -> f b
afb
{-# INLINE (<*>) #-}
newtype StateT s m a = StateT { forall s (m :: * -> *) a. StateT s m a -> s -> m (a, s)
runStateT :: s -> m (a, s) }
type State s = StateT s Identity
state :: Monad m => (s -> (a, s)) -> StateT s m a
state :: forall (m :: * -> *) s a. Monad m => (s -> (a, s)) -> StateT s m a
state s -> (a, s)
f = (s -> m (a, s)) -> StateT s m a
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
StateT ((a, s) -> m (a, s)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ((a, s) -> m (a, s)) -> (s -> (a, s)) -> s -> m (a, s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> (a, s)
f)
{-# INLINE state #-}
evalState :: State s a -> s -> a
evalState :: forall s a. State s a -> s -> a
evalState State s a
m s
s = (a, s) -> a
forall a b. (a, b) -> a
fst (State s a -> s -> (a, s)
forall s a. State s a -> s -> (a, s)
runState State s a
m s
s)
{-# INLINE evalState #-}
runState :: State s a -> s -> (a, s)
runState :: forall s a. State s a -> s -> (a, s)
runState State s a
m = Identity (a, s) -> (a, s)
forall a. Identity a -> a
runIdentity (Identity (a, s) -> (a, s))
-> (s -> Identity (a, s)) -> s -> (a, s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. State s a -> s -> Identity (a, s)
forall s (m :: * -> *) a. StateT s m a -> s -> m (a, s)
runStateT State s a
m
{-# INLINE runState #-}
instance (Functor m) => Functor (StateT s m) where
fmap :: forall a b. (a -> b) -> StateT s m a -> StateT s m b
fmap a -> b
f StateT s m a
m = (s -> m (b, s)) -> StateT s m b
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
StateT ((s -> m (b, s)) -> StateT s m b)
-> (s -> m (b, s)) -> StateT s m b
forall a b. (a -> b) -> a -> b
$ \ s
s ->
((a, s) -> (b, s)) -> m (a, s) -> m (b, s)
forall a b. (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\ ~(a
a, s
s') -> (a -> b
f a
a, s
s')) (m (a, s) -> m (b, s)) -> m (a, s) -> m (b, s)
forall a b. (a -> b) -> a -> b
$ StateT s m a -> s -> m (a, s)
forall s (m :: * -> *) a. StateT s m a -> s -> m (a, s)
runStateT StateT s m a
m s
s
{-# INLINE fmap #-}
instance (Functor m, Monad m) => Applicative (StateT s m) where
pure :: forall a. a -> StateT s m a
pure a
a = (s -> m (a, s)) -> StateT s m a
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
StateT ((s -> m (a, s)) -> StateT s m a)
-> (s -> m (a, s)) -> StateT s m a
forall a b. (a -> b) -> a -> b
$ \ s
s -> (a, s) -> m (a, s)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, s
s)
{-# INLINE pure #-}
StateT s -> m (a -> b, s)
mf <*> :: forall a b. StateT s m (a -> b) -> StateT s m a -> StateT s m b
<*> StateT s -> m (a, s)
mx = (s -> m (b, s)) -> StateT s m b
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
StateT ((s -> m (b, s)) -> StateT s m b)
-> (s -> m (b, s)) -> StateT s m b
forall a b. (a -> b) -> a -> b
$ \ s
s -> do
~(a -> b
f, s
s') <- s -> m (a -> b, s)
mf s
s
~(a
x, s
s'') <- s -> m (a, s)
mx s
s'
(b, s) -> m (b, s)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> b
f a
x, s
s'')
{-# INLINE (<*>) #-}
instance (Monad m) => Monad (StateT s m) where
#if !(MIN_VERSION_base(4,8,0))
return a = StateT $ \ s -> return (a, s)
{-# INLINE return #-}
#endif
StateT s m a
m >>= :: forall a b. StateT s m a -> (a -> StateT s m b) -> StateT s m b
>>= a -> StateT s m b
k = (s -> m (b, s)) -> StateT s m b
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
StateT ((s -> m (b, s)) -> StateT s m b)
-> (s -> m (b, s)) -> StateT s m b
forall a b. (a -> b) -> a -> b
$ \ s
s -> do
~(a
a, s
s') <- StateT s m a -> s -> m (a, s)
forall s (m :: * -> *) a. StateT s m a -> s -> m (a, s)
runStateT StateT s m a
m s
s
StateT s m b -> s -> m (b, s)
forall s (m :: * -> *) a. StateT s m a -> s -> m (a, s)
runStateT (a -> StateT s m b
k a
a) s
s'
{-# INLINE (>>=) #-}
#if !MIN_VERSION_base(4,13,0)
fail str = StateT $ \ _ -> fail str
{-# INLINE fail #-}
#endif
#if MIN_VERSION_base(4,9,0)
instance (Fail.MonadFail m) => Fail.MonadFail (StateT s m) where
fail :: forall a. [Char] -> StateT s m a
fail [Char]
str = (s -> m (a, s)) -> StateT s m a
forall s (m :: * -> *) a. (s -> m (a, s)) -> StateT s m a
StateT ((s -> m (a, s)) -> StateT s m a)
-> (s -> m (a, s)) -> StateT s m a
forall a b. (a -> b) -> a -> b
$ \ s
_ -> [Char] -> m (a, s)
forall a. [Char] -> m a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
Fail.fail [Char]
str
#endif