
On 5/7/11 4:29 PM, Eitan Goldshtrom wrote:
I know about the $ symbol, that's why it's in there in the respective places. I see that I can use it to fix my problem, but I was trying to figure out function composition really. I guess that's just not the place for it. I'll check out Control.Applicative. Also thanks for the clarification on function application. I know functions are by default infixl 9, but I hadn't really thought that through all the way.
The "secret" to parentheses in Haskell is that juxtaposition binds most strongly. That's it. Other languages (e.g., Perl, ML) have much more complicated rules which often lead new Haskellers astray; ignore them! Thus, f p = putStrLn $ show (Main.id p) ++ " - message received" Because you are applying Main.id to p, and you are applying show to (Main.id p). Of course, this is identical to: f p = putStrLn (show (Main.id p) ++ " - message received") Since ($) is defined by: f $ x = f x with very low precedence. Alternatively, these are also identical to: f p = putStrLn $ (show . Main.id) p ++ " - message received" f p = putStrLn $ ((show . Main.id) p) ++ " - message received" f p = putStrLn $ (show . Main.id $ p) ++ " - message received" f p = putStrLn ((show . Main.id $ p) ++ " - message received") etc. Note that the definition of (.) is: f . g = \x -> f (g x) or, if you prefer, (f . g) x = f (g x) -- Live well, ~wren