module Data.Function.Contravariant.Composition where

(-.) :: (a -> b)
     -> (b -> c)
     -> a -> c
(-.) = flip (.)

(-.:) :: (b -> c)
      -> (a -> c -> d)
      -> a -> b -> d
(-.:) p q a b = q a $ p b

(-.:.) :: (c -> d)
       -> (a -> b -> d -> e)
       -> a -> b -> c -> e
(-.:.) p q a b c = q a b $ p c

(-.::) :: (d -> e)
       -> (a -> b -> c -> e -> f)
       -> a -> b -> c -> d -> f
(-.::) p q a b c d = q a b c $ p d

(-.::.) :: (e -> f)
        -> (a -> b -> c -> d -> f -> g)
        -> a -> b -> c -> d -> e -> g
(-.::.) p q a b c d e = q a b c d $ p e

(-.:::) :: (f -> g)
        -> (a -> b -> c -> d -> e -> g -> h)
        -> a -> b -> c -> d -> e -> f -> h
(-.:::) p q a b c d e f = q a b c d e $ p f

(-.:::.) :: (g -> h)
         -> (a -> b -> c -> d -> e -> f -> h -> i)
         -> a -> b -> c -> d -> e -> f -> g -> i
(-.:::.) p q a b c d e f g = q a b c d e f $ p g

(-.::::) :: (h -> i)
         -> (a -> b -> c -> d -> e -> f -> g -> i -> j)
         -> a -> b -> c -> d -> e -> f -> g -> h -> j
(-.::::) p q a b c d e f g h = q a b c d e f g $ p h

(-.::::.) :: (i -> j)
          -> (a -> b -> c -> d -> e -> f -> g -> h -> j -> k)
          -> a -> b -> c -> d -> e -> f -> g -> h -> i -> k
(-.::::.) p q a b c d e f g h i = q a b c d e f g h $ p i