That's not true. The compiler will give the function the most general type it can infer, which in this case is
holds :: Eq a => UnionFindElement a -> a -> Bool
without you needing to specify it in the file.The point of the article is sound - using the interpreter to ask for types is a great way to work (and often leads to surprising realizations which can lead you to generalize and abstract your code), but the reasoning is spurious. Most of the time, you don't need to supply types in Haskell, as the compiler is perfectly capable of figuring them out for itself.