module Synthesizer.ApplicativeUtility where
import Control.Arrow (Arrow, (<<<), )
import Control.Monad.Fix (fix, )
import Control.Applicative (Applicative, (<*>), (<$>), liftA2, )
import Data.Traversable (Traversable, sequenceA, )
{-# INLINE liftA4 #-}
liftA4 :: Applicative f =>
(a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e
liftA4 :: forall (f :: * -> *) a b c d e.
Applicative f =>
(a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e
liftA4 a -> b -> c -> d -> e
f f a
a f b
b f c
c f d
d = a -> b -> c -> d -> e
f forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f c
c forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f d
d
{-# INLINE liftA5 #-}
liftA5 :: Applicative f =>
(a -> b -> c -> d -> e -> g) -> f a -> f b -> f c -> f d -> f e -> f g
liftA5 :: forall (f :: * -> *) a b c d e g.
Applicative f =>
(a -> b -> c -> d -> e -> g)
-> f a -> f b -> f c -> f d -> f e -> f g
liftA5 a -> b -> c -> d -> e -> g
f f a
a f b
b f c
c f d
d f e
e = a -> b -> c -> d -> e -> g
f forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f c
c forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f d
d forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f e
e
{-# INLINE liftA6 #-}
liftA6 :: Applicative f =>
(a -> b -> c -> d -> e -> g -> h) -> f a -> f b -> f c -> f d -> f e -> f g -> f h
liftA6 :: forall (f :: * -> *) a b c d e g h.
Applicative f =>
(a -> b -> c -> d -> e -> g -> h)
-> f a -> f b -> f c -> f d -> f e -> f g -> f h
liftA6 a -> b -> c -> d -> e -> g -> h
f f a
a f b
b f c
c f d
d f e
e f g
g = a -> b -> c -> d -> e -> g -> h
f forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f c
c forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f d
d forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f e
e forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> f g
g
{-# INLINE loop #-}
loop :: (Functor f) =>
f (a -> a)
-> f a
loop :: forall (f :: * -> *) a. Functor f => f (a -> a) -> f a
loop = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a. (a -> a) -> a
fix
infixl 0 $:, $::, $^, $#
infixr 9 .:, .^
{-# INLINE ($:) #-}
($:) :: (Applicative f) => f (a -> b) -> f a -> f b
$: :: forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
($:) = forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
(<*>)
{-# INLINE ($::) #-}
($::) :: (Applicative f, Traversable t) =>
f (t a -> b) -> t (f a) -> f b
$:: :: forall (f :: * -> *) (t :: * -> *) a b.
(Applicative f, Traversable t) =>
f (t a -> b) -> t (f a) -> f b
($::) f (t a -> b)
f t (f a)
arg = f (t a -> b)
f forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA t (f a)
arg
{-# INLINE (.:) #-}
(.:) :: (Applicative f, Arrow arrow) =>
f (arrow b c) -> f (arrow a b) -> f (arrow a c)
.: :: forall (f :: * -> *) (arrow :: * -> * -> *) b c a.
(Applicative f, Arrow arrow) =>
f (arrow b c) -> f (arrow a b) -> f (arrow a c)
(.:) = forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
(<<<)
{-# INLINE ($^) #-}
($^) :: (Functor f) => (a -> b) -> f a -> f b
$^ :: forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
($^) = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
{-# INLINE (.^) #-}
(.^) :: (Functor f, Arrow arrow) =>
arrow b c -> f (arrow a b) -> f (arrow a c)
.^ :: forall (f :: * -> *) (arrow :: * -> * -> *) b c a.
(Functor f, Arrow arrow) =>
arrow b c -> f (arrow a b) -> f (arrow a c)
(.^) arrow b c
f = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (arrow b c
f forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<)
{-# INLINE ($#) #-}
($#) :: (Functor f) => f (a -> b) -> a -> f b
$# :: forall (f :: * -> *) a b. Functor f => f (a -> b) -> a -> f b
($#) f (a -> b)
f a
x = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a b. (a -> b) -> a -> b
$ a
x) f (a -> b)
f
{-# INLINE liftP #-}
liftP :: (Applicative f) =>
f (a -> b) -> f a -> f b
liftP :: forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
liftP = forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
($:)
{-# INLINE liftP2 #-}
liftP2 :: (Applicative f) =>
f (a -> b -> c) -> f a -> f b -> f c
liftP2 :: forall (f :: * -> *) a b c.
Applicative f =>
f (a -> b -> c) -> f a -> f b -> f c
liftP2 f (a -> b -> c)
f f a
a f b
b = f (a -> b -> c)
f forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: f a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: f b
b
{-# INLINE liftP3 #-}
liftP3 :: (Applicative f) =>
f (a -> b -> c -> d) -> f a -> f b -> f c -> f d
liftP3 :: forall (f :: * -> *) a b c d.
Applicative f =>
f (a -> b -> c -> d) -> f a -> f b -> f c -> f d
liftP3 f (a -> b -> c -> d)
f f a
a f b
b f c
c = f (a -> b -> c -> d)
f forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: f a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: f b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: f c
c
{-# INLINE liftP4 #-}
liftP4 :: (Applicative f) =>
f (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e
liftP4 :: forall (f :: * -> *) a b c d e.
Applicative f =>
f (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e
liftP4 f (a -> b -> c -> d -> e)
f f a
a f b
b f c
c f d
d = f (a -> b -> c -> d -> e)
f forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: f a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: f b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: f c
c forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
$: f d
d