\$

\$ is an infix operator often seen in Haskell code. It applies the function on its left to the value on its right. At first glance this operator appears redundant, since ordinary application `(f x)` means the same as `(f \$ x)`. However, `\$` has the lowest, right-associative binding precedence (infixr 0), so it sometimes allows parentheses to be omitted; for example:

```    f \$ g \$ h x  =  f (g (h x))
```

If `\$` were omitted, the parse would be different:

```    f g h x = ((f g) h) x
```

It is also useful in higher-order situations, such as `map (\$ 0) xs`, or `zipWith (\$) fs xs`.

Definition

\$ comes from the Prelude, where it is defined as:

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

Note

The \$ syntax is also used in Template Haskell with an entirely different meaning. If the \$ is immediately followed by a letter or a left parenthesis (with no intervening white space), then it is understood by the GHC compiler as a Template Haskell splice and not the infix operator described above. To get the infix operator be sure to separate the \$ from the right argument by at least one white space.