
Exactly. It is a convenience operator that lets you do: f x $ g y $ h z instead of f x (g y (h z)) As for whether you should write: foo = f . g or foo x = f $ g x ..go with whichever looks clearest and nicest to you. In most cases where you are just taking one argument and applying some functions to it, it's nice to omit the x. But in more complex cases, it may make your code harder to read and modify. See http://www.haskell.org/haskellwiki/Pointfree (and Problems with "pointless" style.) I personally always use pointfree where I would've required a lambda expression, e.g.: f (g . h) y instead of f (\x -> g $ h x) y On Tue, Feb 12, 2013 at 10:23 PM, Emanuel Koczwara < poczta@emanuelkoczwara.pl> 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