Função de aplicação de função em Haskell

Digamos que eu tenha uma lista de funções

functions = [f, g, h]

cada um com o tipoa -> a

Eu também tenho uma lista de valores, digamos números, mas qualquer coisa deve funcionar aqui

vals = [1,2,3]

Eu quero aplicar cada função emfunctions para o valor correspondente emvals

Meu primeiro instinto é usar um lambda e zipWith:

zipWith (\f v -> f v) functions vals

Mas, francamente, isso parece feio e não é algo que eu esperaria em uma linguagem tão agradável como Haskell. Uma função de aplicação de função soa como a solução. Existe uma coisa dessas? Estou faltando alguma coisa e há uma solução muito melhor para o meu problema? Acabei escrevendo essa construção para uma solução do Project Euler. Funciona, mas eu não gosto.

questionAnswers(3)

yourAnswerToTheQuestion