Функция применяется n + 1 раз к n. Для этого надо список из n + 1 функций f свернуть при помощи композиции, а затем применить к аргументу. Добавим ещё fromIntegral, так как в примерах у вас синусы, которым нужно число с плавающей точкой, а n же у вас - целое (функцию можно применить только целое кол-во раз).
execute f n = foldr1 (.) (replicate (succ n) f) (fromIntegral n)
где replicate (succ n) f - список из n + 1 функций f, foldr1 (.) - свёртка списка композицией
Есть и второй вариант, не сворачивать n + 1 функций f через композицию, а сворачивать список, на каждом шаге сразу применяя к аргументу, т.е. так:
execute f n = foldr ($) (fromIntegral n) (replicate (succ n) f)
где ($) - функция применения, т.е. f $ x = f x