
An example that helped me understand the utility of the $ operator is as follows: suppose that we have a list of functions fs :: [a -> b] fs = [f1, f2, ..., fk] and a list of arguments as :: [a] as = [a1, a2, ..., ak] and we want to produce the list [f1(a1), f2(a2), ..., fk(ak)], or equivalently [f1 a1, f2 a2, ..., fk ak], this can be done using the $ operator via zipWith ($) fs as simply because it makes the function application explicit. ::paul On 2013-02-12, at 13:44 , mukesh tiwari wrote:
You can write (f . g) x as f . g $ x so for me, it's avoiding extra parenthesis.
Mukesh
On Wed, Feb 13, 2013 at 2:53 AM, Emanuel Koczwara
wrote: Hi, Dnia 2013-02-12, wto o godzinie 22:09 +0100, Martin Drautzburg pisze:
On Friday, 1. February 2013 23:02:39 Ertugrul Söylemez wrote:
(f . g) x = f (g x)
so (f . g) x = f $ g x
right?
That looks like the two are pretty interchangeable. When would I prefer one over the other?
($) has lower precedence (it was introduced for that reason I belive).
Prelude> :info ($) ($) :: (a -> b) -> a -> b -- Defined in GHC.Base infixr 0 $
Please take a look at: http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.1/Prelude.h...
From the docs:
"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..."
Emanuel
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners