-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Higher-order function combinators
--   
--   Replacement for <a>composition</a> or <a>composition-extra</a>,
--   exporting everything in one module.
@package composition-prelude
@version 3.0.1.0

module Control.Composition
(.*) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
infixr 8 .*
(.**) :: (d -> e) -> (a -> b -> c -> d) -> a -> b -> c -> e
infixr 8 .**
(.***) :: (e -> f) -> (a -> b -> c -> d -> e) -> a -> b -> c -> d -> f
infixr 8 .***

(.****) :: (f -> g) -> (a -> b -> c -> d -> e -> f) -> a -> b -> c -> d -> e -> g
infixr 8 .****

(.*****) :: (g -> h) -> (a -> b -> c -> d -> e -> f -> g) -> a -> b -> c -> d -> e -> f -> h
infixr 8 .*****

(.******) :: (h -> i) -> (a -> b -> c -> d -> e -> f -> g -> h) -> a -> b -> c -> d -> e -> f -> g -> i
infixr 8 .******

-- | Backwards function composition. This is a specialization of
--   <a>&lt;&amp;&gt;</a>, but it has a different fixity.
(-.) :: (a -> b) -> (b -> c) -> a -> c
infixr 8 -.

(.@) :: (b -> c) -> (a -> c -> d) -> a -> b -> d
infixr 8 .@

(.@@) :: (c -> d) -> (a -> b -> d -> e) -> a -> b -> c -> e
infixr 8 .@@

(.@@@) :: (d -> e) -> (a -> b -> c -> e -> f) -> a -> b -> c -> d -> f
infixr 8 .@@@

(.@@@@) :: (e -> f) -> (a -> b -> c -> d -> f -> g) -> a -> b -> c -> d -> e -> g
infixr 8 .@@@@

(.@@@@@) :: (f -> g) -> (a -> b -> c -> d -> e -> g -> h) -> a -> b -> c -> d -> e -> f -> h
infixr 8 .@@@@@

-- | A monadic version of <a>.*</a>. Compare <a>&lt;=&lt;</a>.
--   
--   As an example, one could use this to rewrite
--   
--   <pre>
--   \x y z -&gt; f (g x y z) z
--   </pre>
--   
--   to
--   
--   <pre>
--   f &lt;=*&lt; g
--   </pre>
(<=*<) :: Monad m => (c -> m d) -> (a -> b -> m c) -> a -> b -> m d
infixr 1 <=*<

-- | The bleeding fish operator
(<=**<) :: Monad m => (d -> m e) -> (a -> b -> c -> m d) -> a -> b -> c -> m e
infixr 1 <=**<

(>=**>) :: Monad m => (a -> b -> c -> m d) -> (d -> m e) -> a -> b -> c -> m e
infixr 1 >=**>

-- | Compare <a>&gt;=&gt;</a>.
(>=*>) :: Monad m => (a -> b -> m c) -> (c -> m d) -> a -> b -> m d
infixr 1 >=*>

(<-=*<) :: Monad m => (b -> m c) -> (a -> c -> m d) -> a -> b -> m d
infixr 1 <-=*<

(>-=*>) :: Monad m => (a -> c -> m d) -> (b -> m c) -> a -> b -> m d
infixr 1 >-=*>

(<-=**<) :: Monad m => (c -> m d) -> (a -> b -> d -> m e) -> a -> b -> c -> m e
infixr 1 <-=**<

(>-=**>) :: Monad m => (a -> b -> d -> m e) -> (c -> m d) -> a -> b -> c -> m e
infixr 1 >-=**>

-- | Can be used to rewrite
--   
--   <pre>
--   \g -&gt; f . g . h
--   </pre>
--   
--   to
--   
--   <pre>
--   between f h
--   </pre>
between :: (c -> d) -> (a -> b) -> (b -> c) -> a -> d
(~@~) :: (c -> d) -> (a -> b) -> (b -> c) -> a -> d
infixl 8 ~@~
betweenM :: Monad m => (c -> m d) -> (a -> m b) -> (b -> m c) -> a -> m d
(<~@~<) :: Monad m => (c -> m d) -> (a -> m b) -> (b -> m c) -> a -> m d
infixl 8 <~@~<

-- | Backwards function application. This is an infix synonym for
--   <a>flip</a>
(-$) :: (a -> b -> c) -> b -> a -> c
infixl 8 -$
bisequence' :: (Traversable t, Applicative f) => t (a -> b -> f c) -> a -> b -> t (f c)

-- | Infix version of <a>join</a>
--   
--   As an example, one could use this to rewrite
--   
--   <pre>
--   between (char '"') (char '"')
--   </pre>
--   
--   to
--   
--   <pre>
--   between .$ (char '"')
--   </pre>
--   
--   Or
--   
--   <pre>
--   fromEither :: Either a a -&gt; a
--   fromEither = either id id
--   </pre>
--   
--   to
--   
--   <pre>
--   fromEither :: Either a a -&gt; a
--   fromEither = either .$ id
--   </pre>
(.$) :: Monad m => m (m a) -> m a
infixl 3 .$
onM :: Monad m => (b -> b -> m c) -> (a -> m b) -> a -> a -> m c
axe :: (Traversable t, Applicative f) => t (a -> f ()) -> a -> f ()
biaxe :: (Traversable t, Applicative f) => t (a -> b -> f ()) -> a -> b -> f ()

thread :: Foldable t => t (a -> a) -> a -> a
threadM :: (Monad m, Foldable t, Applicative m) => t (a -> m a) -> a -> m a
both :: (a -> b) -> (a, a) -> (b, b)

dup :: a -> (a, a)

-- | Infix synonym for <a>both</a>
(+>) :: (a -> b) -> (a, a) -> (b, b)
infixr 6 +>

-- | Pronounced 'appose'. Synonym for <a>on</a>
(&:) :: (b -> b -> c) -> (a -> b) -> a -> a -> c
infixl 0 &:
(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c
(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c
(<**>) :: Applicative f => f a -> f (a -> b) -> f b
(&) :: a -> (a -> b) -> b
(<&>) :: Functor f => f a -> (a -> b) -> f b
fix :: (a -> a) -> a
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
