1) скобки в описании типа расставляются вправо, так что может быть любое количество аргументов:
fun:: a -> (a -> (a -> a))
2) частичное применение означает, что функции можно скармливать аргументы по одному в любом количестве.
(в режиме оператора можно подсунуть второй, а первый - потом).
3) про каррирование. Есть вид передачи параметров в других языках fun(p1, p2, p3). На Haskell это передача одной группы (кортежа). Есть функции высшего порядка curry и uncurry, которые вашу функцию переводят в противоположный тип.