module Data.Function.HT (
   Id, nest, powerAssociative, compose2,
   ) where

import Data.Function.HT.Private (nest, powerAssociative, )


{- |
Useful for adding type annotations like in

> f . (id :: Id Char) . g
-}
type Id a = a -> a

{- |
Known as @on@ in newer versions of the @base@ package.
-}
{-# INLINE compose2 #-}
compose2 :: (b -> b -> c) -> (a -> b) -> (a -> a -> c)
compose2 :: forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
compose2 b -> b -> c
g a -> b
f a
x a
y = b -> b -> c
g (a -> b
f a
x) (a -> b
f a
y)