# Type sig of `(\$)`

## Understanding the `(\$)` Operator in Haskell

The `(\$)` operator is a type of function composition in Haskell, also known as the apply operator. It is defined as follows:

``````(\$) :: (a -> b) -> a -> b
f \$ a = f a
``````

This is nearly identical to the official definition, except that the official definition uses a sophisticated type `TYPE`:

``````(\$) :: forall r a (b :: TYPE r). (a -> b) -> a -> b
f \$ x =  f x
``````

The `TYPE` type is a type-level computation, which allows programs to be written at the type-level. It is necessary in the `(\$)` operator definition because it allows functions to be applied at the type-level, allowing for more efficient computation.

The `(\$)` operator in Haskell is a type of function composition, also known as the apply operator. It is defined as follows:

``````(\$) :: (a -> b) -> a -> b
f \$ a = f a
``````

The official definition of `(\$)` uses a sophisticated type `TYPE`. Here is the official definition:

``````(\$) :: forall r a (b :: TYPE r). (a -> b) -> a -> b
f \$ x = f x
``````

The `TYPE` type is a type-level computation that allows programs to be written at the type level. It is necessary in the definition of `(\$)` because it allows functions to be applied at the type level, enabling more efficient computation.