Application operator. This operator is redundant, since ordinary
application
(f x) means the same as
(f $ x).
However,
$ has low, right-associative binding precedence, so it
sometimes allows parentheses to be omitted; for example:
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.
Note that
($) is levity-polymorphic in its result
type, so that
foo $ True where
foo :: Bool ->
Int# is well-typed.