
On Wednesday 15 December 2010 15:15:16, Guofeng Zhang wrote:
What does "$" mean in Left $ A x. Why does not write it as "Left A x"?
($) is used for fixity, it's a low-precedence identity for functions. You could also use parentheses for that. "Left $ A x" is equivalent to "Left (A x)" while "Left A x" would be parsed as "(Left A) x" - and therefore give a type error, since "Left A" has the type Either (Int -> A) b (assuming A is a value constructor for the type A which takes an Int argument) and not a function type, hence you can't apply it to the value x.
For putStrLn $ "welcome", is the "$" has the same meaning as that in Left $ A x?
In `putStrLn $ "welcome"', the $ is completely superfluous because you apply putStrLn to an atomic value (syntacically atomic, it's a single token), so you can say it has no meaning at all there, or it has the same meaning, implicitly adding parentheses, sort of. If you had `putStrLn $ "Welcome, " ++ name', it would again serve the same purpose, to group the tokens to yield a syntactically correct expression.