With Haskell\'s type classes it almost seems that it enables ad hoc polymorphism, but its functions declarations seem parametric polymorphism. Am I mixing my understanding
Indeed, Haskell supports both (higher rank) parametric polymorphism, and ad hoc (or bounded) polymorphism. Parametric polymorphism in Haskell is supported via its Hindley-Milner/System F type system. Ad hoc polymorphism is supported via type classes.
For the origin of type classes and ad hoc polymorphism, see Wadler's papers:
For the origin of the distinction between parametric and ad hoc polymorphism, you can dig up Strachey's papers,