module Data.Function.Syntax
  ( module X
  , (*.)
  , (**.)
  , (***.)
  , (****.)
  , (*****.)
  , (******.)
  , (*******.)
  , (********.)
  ) where

import Data.Composition as X
import Data.Function.Contravariant.Syntax as X
import Data.Function.Apply as X
import Data.Function.Flip  as X
import Data.Function.Slip  as X
import Data.Function.Twist as X


(*.) :: (a -> c -> d) -> (b -> c) -> a -> b -> d
*. :: forall a c d b. (a -> c -> d) -> (b -> c) -> a -> b -> d
(*.) = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall {b} {c} {a} {d}. (b -> c) -> (a -> c -> d) -> a -> b -> d
(-.*)

infixl 8 *.

(**.) :: (a -> b -> d -> e) -> (c -> d) -> a -> b -> c -> e
**. :: forall a b d e c.
(a -> b -> d -> e) -> (c -> d) -> a -> b -> c -> e
(**.) = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall {c} {d} {a} {b} {e}.
(c -> d) -> (a -> b -> d -> e) -> a -> b -> c -> e
(-.**)

infixl 8 **.

(***.) :: (a -> b -> c -> e -> f) -> (d -> e) -> a -> b -> c -> d -> f
***. :: forall a b c e f d.
(a -> b -> c -> e -> f) -> (d -> e) -> a -> b -> c -> d -> f
(***.) = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall {d} {e} {a} {b} {c} {f}.
(d -> e) -> (a -> b -> c -> e -> f) -> a -> b -> c -> d -> f
(-.***)

infixl 8 ***.

(****.) :: (a -> b -> c -> d -> f -> g) -> (e -> f) -> a -> b -> c -> d -> e -> g
****. :: forall a b c d f g e.
(a -> b -> c -> d -> f -> g)
-> (e -> f) -> a -> b -> c -> d -> e -> g
(****.) = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall {e} {f} {a} {b} {c} {d} {g}.
(e -> f)
-> (a -> b -> c -> d -> f -> g) -> a -> b -> c -> d -> e -> g
(-.****)

infixl 8 ****.

(*****.) :: (a -> b -> c -> d -> e -> g -> h) -> (f -> g) -> a -> b -> c -> d -> e -> f -> h
*****. :: forall a b c d e g h f.
(a -> b -> c -> d -> e -> g -> h)
-> (f -> g) -> a -> b -> c -> d -> e -> f -> h
(*****.) = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall {f} {g} {a} {b} {c} {d} {e} {h}.
(f -> g)
-> (a -> b -> c -> d -> e -> g -> h)
-> a
-> b
-> c
-> d
-> e
-> f
-> h
(-.*****)

infixl 8 *****.

(******.) :: (a -> b -> c -> d -> e -> f -> h -> i) -> (g -> h) -> a -> b -> c -> d -> e -> f -> g -> i
******. :: forall a b c d e f h i g.
(a -> b -> c -> d -> e -> f -> h -> i)
-> (g -> h) -> a -> b -> c -> d -> e -> f -> g -> i
(******.) = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall {g} {h} {a} {b} {c} {d} {e} {f} {i}.
(g -> h)
-> (a -> b -> c -> d -> e -> f -> h -> i)
-> a
-> b
-> c
-> d
-> e
-> f
-> g
-> i
(-.******)

infixl 8 ******.

(*******.) :: (a -> b -> c -> d -> e -> f -> g -> i -> j) -> (h -> i) -> a -> b -> c -> d -> e -> f -> g -> h -> j
*******. :: forall a b c d e f g i j h.
(a -> b -> c -> d -> e -> f -> g -> i -> j)
-> (h -> i) -> a -> b -> c -> d -> e -> f -> g -> h -> j
(*******.) = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall {h} {i} {a} {b} {c} {d} {e} {f} {g} {j}.
(h -> i)
-> (a -> b -> c -> d -> e -> f -> g -> i -> j)
-> a
-> b
-> c
-> d
-> e
-> f
-> g
-> h
-> j
(-.*******)

infixl 8 *******.

(********.) :: (a -> b -> c -> d -> e -> f -> g -> h -> j -> k) -> (i -> j) -> a -> b -> c -> d -> e -> f -> g -> h -> i -> k
********. :: forall a b c d e f g h j k i.
(a -> b -> c -> d -> e -> f -> g -> h -> j -> k)
-> (i -> j) -> a -> b -> c -> d -> e -> f -> g -> h -> i -> k
(********.) = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall {i} {j} {a} {b} {c} {d} {e} {f} {g} {h} {k}.
(i -> j)
-> (a -> b -> c -> d -> e -> f -> g -> h -> j -> k)
-> a
-> b
-> c
-> d
-> e
-> f
-> g
-> h
-> i
-> k
(-.********)

infixl 8 ********.