module Data.Predicate.Product where
infixr 5 :::
data a ::: b = a ::: b deriving (Eq, Show)
(#) :: a -> (a -> b) -> b
(#) = flip ($)
hd :: a ::: b -> a
hd (a ::: _) = a
tl :: a ::: b -> b
tl (_ ::: b) = b
_1 :: a ::: b -> a
_1 = _1'
_2 :: a ::: b ::: c -> b
_2 = hd . _2'
_3 :: a ::: b ::: c ::: d -> c
_3 = hd . _3'
_4 :: a ::: b ::: c ::: d ::: e -> d
_4 = hd . _4'
_5 :: a ::: b ::: c ::: d ::: e ::: f -> e
_5 = hd . _5'
_6 :: a ::: b ::: c ::: d ::: e ::: f ::: g -> f
_6 = hd . _6'
_7 :: a ::: b ::: c ::: d ::: e ::: f ::: g ::: h -> g
_7 = hd . _7'
_8 :: a ::: b ::: c ::: d ::: e ::: f ::: g ::: h ::: i -> h
_8 = hd . _8'
_9 :: a ::: b ::: c ::: d ::: e ::: f ::: g ::: h ::: i ::: j -> i
_9 = hd . _9'
_1' :: a ::: b -> a
_1' = hd
_2' :: a ::: b -> b
_2' = tl
_3' :: a ::: b ::: c -> c
_3' = tl . tl
_4' :: a ::: b ::: c ::: d -> d
_4' = tl . tl . tl
_5' :: a ::: b ::: c ::: d ::: e -> e
_5' = tl . tl . tl . tl
_6' :: a ::: b ::: c ::: d ::: e ::: f -> f
_6' = tl . tl . tl . tl . tl
_7' :: a ::: b ::: c ::: d ::: e ::: f ::: g -> g
_7' = tl . tl . tl . tl . tl . tl
_8' :: a ::: b ::: c ::: d ::: e ::: f ::: g ::: h -> h
_8' = tl . tl . tl . tl . tl . tl . tl
_9' :: a ::: b ::: c ::: d ::: e ::: f ::: g ::: h ::: i -> i
_9' = tl . tl . tl . tl . tl . tl . tl . tl