Let's first review the type signature of ($):
ghci>> :t ($)
($) :: (a -> b) -> a -> b
And definition:
($) f x = f x
Or:
f $ x = f x
And above, we have a section where we've created a partially applied version of ($) with the second argument (of type a) set as 3. Now, we know that 3 has type Num a => a, so the type signature of our partial application must be Num a => (a -> b) -> b.
Next, let's look at each of the functions in our list, each of which will be an argument to ($ 3). As expected, they are functions and it turns out that their type Num a -> a -> a is actually more constrained than was required (so we're good). Just to be clear, we can look at what one application would entail:
($3) (4+)
Which we can rewrite without the section as:
($) (4+) 3
At which point it's pretty clear from the function definition above how application proceeds.
The last confusing part might be about the type of the list ($3) (4+) evaluates as 7, rather than 7.0 in the repl. If we recall that lists are homogeneous and notice that one of the functions in the list, sqrt, accepts and returns a floating value, we see that this type enforced for all applications.