ну на самом деле всё понятно же, просто надо писать на х-ле
по факту эта шткка оправдана потому что это
func :: Int -> (Int -> (Int -> Int)), но ->
право-ассоциативный оператор и поэтому скобки не нужны.
такая функция может быть вызвана с одним аргументом и это будет частичный вызов, и она вернёт в данном случае функцию Int -> (Int -> Int), которую мы также вызовем с одним аргументом и получим Int -> Int, и потом уже наконец последний вызов даст нам Int
Проблема не в расставлении скобок, а в том что по типу хрен угадаешь, что там ожидается. В других языках хотя-бы по именам параметров можно понять.