unification
       f :: a = h = (e -> d -> c)
       x b = d

No. x :: b = d (a typo?)
               Paul: What's wrong with x being of type b and of type d? Could you perhaps explain the error please?

Nothing's wrong, you just forgot a ::, that is, you wrote x b = d  instead of x :: b = d.
 


Don't forget also that

funk :: a -> b -> c = h -> e,

which means that e = b -> c
               Paul: is that something to do with partial application? (funk f) is a partially applied function, correct? Again an explanation would be appreciated.

It's because function arrows associate to the right, so a -> b -> c is really shorthand for (a -> (b -> c)).  If (a -> (b -> c)) = h -> e, then a = h and (b -> c) = e.
 
-Brent