:: a -> (a -> b) -> b -package:diagrams-lib -package:quaalude -package:lens-family-core -package:vector package:base-compat
& is a reverse application operator. This provides
notational convenience. Its precedence is one higher than that of the
forward application operator
$, which allows
& to be
nested in
$.
>>> 5 & (+1) & show
"6"
Strict (call-by-value) application operator. It takes a function and
an argument, evaluates the argument to weak head normal form (WHNF),
then calls the function with that value.
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 representation-polymorphic in its
result type, so that
foo $ True where
foo :: Bool
-> Int# is well-typed.