Haskell is a functional language. It does not have variables with states as in object-oriented languages, rather it is build up of functions. The functional concept does open up for a lot more high level programming than object-oriented languages are capable of. It also brings more power to the table, e.g. higher order functions.
Programming in Haskell does resemble math, so one just needs to be familiar with mathematic functions to get started with Haskell. Haskell also supports IO programming, without breaking the functional paradigm.
Generally programs written in Haskell require much less code than in e.g. Java. An extreme example is the quick sort algorithm:
qsort [] = []
qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger
where
smaller = [y | y <- xs, y < x]
larger = [y | y <- xs, y >= x]
The algorithm takes at least 5 times as many rows in Java, not to mention that it's a lot easier to understand how the algorithm works in Haskell.
The best part, in my opinion, about functional programming and Haskell is higher order functions. A function does not have to return a concrete value, it can return a new function. One can make functions, to once and for all, replace common patterns. A good example is the map function. It takes a function and applies it to all elements in a list, returning a list with the result. In an object oriented language that would have required at least a for loop.