Function application has the strongest precedence, thus something like

    fun1 . fun2 arg

is equivalent to

    fun1 . (fun2 arg)

Now, ($) is the same as function application, but has lowest precedence (even lower than (.)).

    infixr 0 ($)
    ($) :: (a -> b) -> a -> b
    f $ x = f x

Thus,

    fun1 . fun2 $ arg

is equivalent to

    (fun1 . fun2) $ arg
==  (fun1 . fun2) arg    { apply ($) }

On 14 May 2015 at 02:42, Shishir Srivastava <shishir.srivastava@gmail.com> wrote:
Hi, 

Could someone please point out what is the difference between using $ and parenthesis in the function composition below. Why does the first expression work whereas the second fails.
---
$$ head.head$[[1,2],[3,4]]
1
$$ head.head([[1,2],[3,4]])

<interactive>:122:12:
    Couldn't match expected type ‘a -> [c]’ with actual type ‘[t0]’
    Relevant bindings include
---
Thanks,
Shishir 

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners




--
Regards

Sumit Sahrawat