The more polymorphic your function, the less it can do—and the more you know about it from the type alone.
-- Very constrained type → almost no implementation freedom
mystery :: forall a. [a] -> [a]
-- Can only rearrange, duplicate, or drop elements.
-- Cannot create new 'a's, or compare them for equality/ordering.
-- Parametricity gives you theorems for free. Lack of constraints provides documentation