Pero como la función que le pasas a map es (uncurry ($)), entonces se debe refinar el tipo a:
map (uncurry ($)) :: [(a->b,a)] -> [b]
El zip toma dos listas y retorna una lista de pares, que es justamente lo que toma la función que vimos.
Como el zip está parcialmente aplicado, sólo resta pasarle una lista.