A function is called polymorphic (“of many forms”) if its type contains one or more type variables. E.g.: length :: [a] -> Int
A polymorphic function is called overloaded if its type contains one or more class constraints. E.g.: (+) :: Num a => a -> a -> a.