Hola!
No me queda muy claro porqué es la d. Entiendo que ya el tipo de la lista es incompatible, porque tenemos en el primer elemento un tipo (a->b) y en el segundo (a->b)->a->[a]->b. Pero de ahí a afirmar que no se le puede asignar el tipo no lo veo. Entiendo que a nivel de compilación no es posible esa lista, pero para mí la función f4 sí tiene ese tipo: recibe los argumentos correctos y retorna el tipo de argumento correcto.
Por otro lado, no supe cómo entender el tipo de la función lambda de la (a). Las funciones lambda tienen un tipo definido? Porque si lo tienen, en esa opción el tipo de f1 sería algo como (c -> (a -> b)) -> a -> [a] -> b, siendo c el tipo del argumento x.
Saludos!